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
}