/yii-import-excel

yii导入excel表格的扩展程序

Primary LanguagePHP

yii-improt-excel

yii导入excel表格的扩展程序,可处理大型表格,程序对常用导入套路进行了封装,可大大简化编写代码的工作量 gittree:https://packagist.org/packages/xing.chen/yii-import-excel

特点

1、可以进行简单的空值检查,重复检查。

2、自动将数据提取出来。

3、使用Yii缓存和配置,可读取处理大型的表格

4、可对时间日期进行处理,提取日期为相应数值

5、可将字符串转换为数组配置对应的键

6、可设置空单元格时的默认值

7、支持事务

安装

composer require 

使用示例和说明

<?php

// 表格序列对应的字段名
$rowsSet = [
    'A' => 'name',
    'B' => 'sex',
    'C' => 'birthday',
];

$start = 1; // 从第几行开始处理

$type = 'update';

ImportExcel::init($file, $rowsSet, $start)
    ->run(function($data) use ($type) {

        // 保存数据的代码
        $m = new Member();
        $m->load($data, '');
        $m->type = $type;
        $m->save();
    });

进阶使用

<?php

// 选项键值设置,比如性别表格中为女,下面设置0 => '女',那么保存到数据库的值不是女,而是0(取键名)
$valueMap = ['sex' => [0 => '女', 1 => '男']];

// 键值默认设置,对应上面的选项值设置,没有默认值表示为必填,如果没有设置的话,将会抛出错误
$valueMapDefault = ['sex' => -1,];


ImportExcel::init($file, $rowsSet, $start)
    ->valueMap($valueMap)// 值映射设置:如[ 0 => '女', 1 => '男'],表格值为男时,实际值将被转换为1,为女时,转为0。以上都不是时,如果没有默认值设置,则抛出错误
    
    ->valueMapDefault($valueMapDefault) // 字段默认值设置(值为空时)
    
    ->setUnique(['name', 'type']) // 要检查重复的字段数组
    
    ->formatFields(['birthday' => 'date']) // 格式设置,比如日期就需要设置,否则读取到值会有问题
    // 设置额外检查方法,此方法在处理、保存数据前检查全部表格。
    ->setCheck(function ($data) {
        // 检查代码
    })
    
    ->setTransaction(true) // 开启事务,默认不开启,注意如果导入数据量大时开启事务可能会造锁死
    // 以下是事务回滚设置(YII)
    ->setTransactionRollBack(function($e) {
        exit('出错了,错误消息:' . $e->getMessage());
    })
    ->run(function($data) {
        // 保存数据的代码
        
        $m = new User();
        $m->load($data, '');
        $m->save();
    });

方法 run($saveFunction) 参数说明

参数 $saveFunction 为匿名函数,用于执行保存的过程。

这个匿名函数是必须自己写的,否则本类完全没有作用。

formatFields 格式设置

date类型 说明:转换为Y-m-d,如果为空时将转换为 \xing\yiiImportExcel\ImportExcel::$defaultDate

date:int类型 说明:转换为时间戳,如果为空则转换为 0

其他说明

\xing\yiiImportExcel\ImportExcel::$defaultDate 默认日期