官方提供的这个导入导出插件直接支持导入导出时插入到某个数据表
导入各参数说明
* 导出Excel
* @param string $expTitle 文件名称
* @param array $expCellName 表头
* @param array $expTableData 数据
* @param array $mergeCells 合并单元格
导入实例
public function export()
{
// 查询数据
$data = LevelModel::all();
// 设置表头信息(对应字段名,宽度,显示表头名称)
$cellName = [
['id', 'auto', 'ID'],
['name', 'auto', '级别名称'],
['score', 'auto', '积分要求'],
['discount', 'auto', '享受折扣'],
['create_time', 'auto', '创建时间'],
['update_time', 'auto', '更新时间']
];
// 调用插件(传入插件名,[导出文件名、表头信息、具体数据])
plugin_action('Excel/Excel/export', ['test', $cellName, $data]);
}
导入各参数说明
* 导入Excel
* @param string $file upload file $_FILES
* @param null $table 导入到指定表,如果不指定,则返回拼接的数据,不执行导入
* @param null $fields 字段名 只导入指定字段名的数据,excel表中其他在字段名找不到的,将不导入
* 传入格式:array('id' => 'id', '用户名' => 'username'),key为数据库字段名,value为excel表头名
* @param int $type 导入模式,0默认为增量导入(导入并跳过已存在的数据),1为覆盖导入(导入并覆盖已存在的数据)
* @param null $where 查询依据,做配合查询使用
* @param null $main_field 作为判断导入模式依据的主要字段,比如指定为KSH,则用KSH这个字段来判断是否已存在数据库
// 接收附件 ID
$excel_file = $this->request->post('excel');
// 获取附件 ID 完整路径
$full_path = getcwd() . get_file_path($excel_file);
// 只导入的字段列表
$fields = [
'name' => '姓名',
'last_login_time' => '最后登录时间',
'last_login_ip' => '最后登陆IP'
];
// 调用插件('插件',[路径,导入表名,字段限制,类型,条件,重复数据检测字段])
$import = plugin_action('Excel/Excel/import', [$full_path, 'vip_test', $fields, $type = 0, $where = null, $main_field = 'name']);
// 失败或无数据导入
if ($import['error']){
$this->error($import['message']);
}
// 导入成功
$this->success($import['message']);
一般来说我们使用导入的话,还需要对导入的数据进行处理,所以我们一般使用一个参数就可以了,入库自己操作就行了。我们只需要解析得到文档的内容
$file_path = './demo.xlsx'; // 使用本地路径
$result = plugin_action('Excel', 'Excel', 'import', [$file_path]);
// 我是文档内容, 你对我做什么都行
// dump($result);