PHP code example of tiderjian / qs-grid-import

1. Go to this page and download the library: Download tiderjian/qs-grid-import library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

tiderjian / qs-grid-import example snippets


$options = [
    'unique' => [ 'project_id' ], //如果是复合唯一,设置多个key值 ['project_id', 'name']
    'data' => [
        [
            'title' => '项目',
            'key' => 'project_id',
            'type' => CellType::SELECT,
            'options' => [ 1 => '项目1', 2 => '项目2'],
            'r_msg' => '立项格式不正确,参考: 2020-01-01' //通过该设置重置日期类型的错误提示
        ],
        [
             'title' => '手机',
             'key' => 'telephone',
             'type' => CellType::INPUT,
             '      
    ]
];

     > $project_arr = [
     >     1 => '项目1',
     >     2 => '项目2',
     >     3 => '项目3'
     > ];
     > 
     > //省略详细配置,仅演示options的设置,以下雷同,不重复提示
     > 'options' => $project_arr
     >

    >  'ignore' => false // 设置为false后,保留不在options里的值,默认为ture
    > 

    > '   //业务逻辑 最后 return是否必填的布尔值
    > }
    >

> 'validate_callback' => function($val, $row){
>     //业务逻辑
> }
> 

    > $options = [
    >   'data' => [
    >     [
    >         'title' => '项目',
    >         'key' => 'project_id',
    >         'type' => CellType::SELECT,
    >         'options' => [ 1 => '项目1', 2 => '项目2'],
    >         '        'title' => '团队名称',
    >             'key' => 'team_name',
    >             'type' => CellType::INPUT,
    >             '

//第一个参数为转换驱动
//第二个参数为上面定义好的$options
$transcoder = new TranscoderFactory("QsExcel", $options);

//这里的的project和team与上面定义的options子母表关系对应,有多少层嵌套关系就可以转出多少个excel配置值,这里是两层关系
list($project, $team) = $transcoder->convertTo();

//这里是QsExcel的配置格式,可查看上面的qs-excel链接查看说明文档
$project_options = [
    'row_count' => 500,
    'headers' => $project
];

$team_options = [
    'row_count' => 500,
    'headers' => $team
];

//创建QsExcel对象,完成模板生成
$excel = new Excel();
$excel->addBuild((new \QsExcel\Builder\ListBuilder($project_options))->setSheetName('项目信息'));
$excel->addBuild((new \QsExcel\Builder\ListBuilder($team_options))->setSheetName('团队信息'));
$excel->output('项目团队资料导入.xlsx');

//上传excel文件的路径
$file_path = '项目团队资料导入.xlsx';
$excel = new Excel();
$excel->setLoadFile($file_path);
//excel有多少张sheet需要读取数据,就设置多少个Loader
$excel->addLoader(new ListLoader());
$excel->addLoader(new ListLoader());
$list = $excel->load();

//这里将表头去掉,否则会出错
$res = [];
foreach($list as $v){
    unset($v[0]);
    $res[] = $v;
}

//根据$options生成转换器对象
$transcoder = new TranscoderFactory("QsExcel", $options);
//将上传的excel数据导入转换器
$transcoder->setData($res);
//$grid_data为通过转换器后,将excel数据转换成grid的数据格式
$grid_data = $transcoder->convertFrom();

//$options不再说明了,就是最开始定义的配置
$grid_import = new GridImport($options);
//完成提交数据的填充和验证
//如果验证有问题,会返回false

$r = $grid_import->fill()->validate();
if($r === false){
    $errArr = $grid_import->responseErrArr();
    //将$errArr数组转换成json格式返回
    //前端grid组件接收到后,会在对应的单元格显示出错误提示
}

//验证通过,通过toArray方法返回导入的数组数据
$import_datas = $grid_import->toArray();
//剩下就是实际的业务逻辑了
//在处理的过程中如果有进一步出错,可以通过一下代码给grid组件返回出错提示
//$error_msg为需要显示的错误信息
$errArr = $grid_import->responseErrArr($error_msg);
//将$errArr数组转换成json格式返回
//前端grid组件接收到后,会通过警告提示显示出错误原因

//如果数据已经成功插入
//返回一个200响应即可,grid组件会显示导入成功提示

//上传,excel数据转换等处理可看上面的代码说明,此处仅列出处理数据导入的代码
$grid_import = new GridImport($options);

$r = $grid_import->fill()->validate();
if($r === false){
    $errArr = $grid_import->responseErrArr();
    //将$errArr数组转换成json格式返回
    //前端grid组件接收到后,会在对应的单元格显示出错误提示
}
foreach($grid_import->getGrid()->getRows() as $index => &$row){
    
    //获取行数据,返回数组格式
    $row_data = $row->getRowData();
    
    //业务处理代码
    
    //处理完成
    if($r){
        //可根据业务需要,选择清除处理成功的数据
        //或者有一条数据不成功都将回滚,可选择不清除
        $grid_import->getGrid()->removeRow($index);
    }
    //处理失败
    else{
        //设置具体错误信息
        $row->setError('设置错误信息');
    }

}

if(处理失败){
    //构造错误应答
    $errArr = $grid_import->responseErrArr();
    //将$errArr数组转换成json格式返回
}
//处理成功
else{   
    //如果数据已经成功插入
    //返回一个200响应即可,grid组件会显示导入成功提示
    //如果是异步导入,返回process:100
}