# 数据导入 ExcelImport
> event('ExcelImport', $config, true);// $config 参数配置,详细参数说明请参考以下说明:
| 参数 | 类型 | 必须 | 默认 | 说明 |
| :------------ | :------------ | :------------ | :------------ | :------------ |
| file | string | Y | | 上传的文件地址,示例:`./upload/file/test.xlsx` |
| table | string | N | | 数据库表名,不含表前缀 |
| model | string | N | | 模型名称,格式:模块名+Model+模型名,示例:systemModelUser |
| validate | string | N | | 验证器名称,格式:模块名+Validate+验证码名,示例:systemValidateUser |
| scene | string | N | | 验证器场景名 |
| field | array | N | | [入库时必须] 数据库映射字段, 示例:['A' => 'name', 'B' => 'age'] |
| delete | bool | N | true | 数据读取成功后是否删除上传的文件|
| start | int | N | 2 | 表格数据起始行|
| end | int | N | | 表格数据结束行|
###### 特别说明
>1.数据库映射字段(field),必须根据Excel列头的字母来做映射。
2.导入的数据需要直接入库时,table或model必须传入一个。
3.导入执行完成后会返回一个array结果:['success' => [], 'fail' => []]; `success` 成功,`fail` 失败
###### 返回success详解
>`success` 根据传入的参数不同,会返回以下几种数据:
1.当传入了`table`参数时,success 返回的是一个数字,此数字代表成功的条数。
2.当传入了 `model`参数时,success 返回的是一个数据集,示例:[[1, 2, 3]],示例里面的1,2,3表示主键ID值。
3.当`table`和`model`都为空且`field`不为空时,success 返回的是新的数据集。
4.当`table`和`model`和`field`都为空时,success 返回的就是Excel的原始数据集。
##### 示例1:直接导入到数据库
```php
// 示例代码
$config = [
'table' => 'test',
'file' => './test.xlsx',
'field' => [
'A' => 'name',
'B' => 'age',
'C' => 'id_number'
],
];
// 插件调用
$res = event('ExcelImport', $config, true);
print_r($res['success']);// 返回成功的条数
```
##### 示例2:通过模型导入到数据库
```php
// 参数配置
$config = [
'model' => 'systemModelTest',
'file' => './test.xlsx',
'field' => [
'A' => 'name',
'B' => 'age',
'C' => 'id_number'
],
];
// 插件调用
$res = event('ExcelImport', $config, true);
print_r($res['success']);// 返回成功的数据集ID
```
##### 示例3:只读取Excel数据并重组为指定的field数据集
```php
// 参数配置
$config = [
'file' => './test.xlsx',
'field' => [
'A' => 'name',
'B' => 'age',
'C' => 'id_number'
],
];
// 插件调用
$res = event('ExcelImport', $config, true);
print_r($res['success']); //返回新的数据集
```
##### 示例4:直接读取Excel数据并返回数据集
```php
// 参数配置
$config = [
'file' => './test.xlsx',
];
// 插件调用
$res = event('ExcelImport', $config, true);
print_r($res['success']); //返回的数据集
```
##### 示例6:先验证数据,再通过模型导入到数据库
```php
// 参数配置
$config = [
'model' => 'systemModelTest',
'validate' => 'systemValidateTest',
'file' => './test.xlsx',
'field' => [
'A' => 'name',
'B' => 'age',
'C' => 'id_number'
],
];
// 插件调用
$res = event('ExcelImport', $config, true);
print_r($res['success']);// 返回成功的数据集ID
print_r($res['fail']);// 返回验证失败的原因
```
# 数据导出
> event('ExcelExport', $config, true);// $config 参数配置,详细参数说明请参考以下说明:
| 参数 | 类型 | 必须 | 默认 | 说明 |
| :------------ | :------------ | :------------ | :------------ | :------------ |
| file_name | string | N | 年-月-日 | 导出的文件名,默认将用`年-月-日`命名 |
| sheet | array | Y | | 工作表配置,支持多个工作表 |
| sheet['head'] | array | Y | | 表头配置,示例:['姓名', '年龄', '手机号'] |
| sheet['data'] | array | N | | 要导出的数据,示例:[['张三', 25, '138XXXXXXXX'], ['李四', 18, '139XXXXXXXX']] |
| sheet['source'] | string | N | | 数据源,表名或模型名(使用驼峰命名),表名格式:db+数据表名(不含表前缀);模型名格式:模块名+Model+模型名 |
| sheet['where'] | array | N | | 数据源查询条件,支持TP6的所有查询表达式,示例:[['type', '=', 1]] |
>特别说明:`source` 和 `data` 必须选填一个
##### 示例1:将数据导出为Excel文件
```php
// 插件配置
$config = [
'sheet' => [
[// 工作表配置
'head' => ['姓名', '年龄', '电话'],
'data' => [
['张三', 26, '138XXXXXXXX'],
['李四', 38, '138XXXXXXXX'],
],
],
],
];
// 插件调用
event('ExcelExport', $config);
```
##### 示例2:将数据库表直接导出为Excel文件
```php
// 插件配置
$config = [
'sheet' => [
[// 工作表配置
'head' => [
// 格式:'数据库字段名称' => 'Excel表头名称',
'name' => '姓名',
'age' => '年龄',
'tel' => '联系电话'
],
'source' => 'dbTest',// 导出test表,格式:db+表名(不含表前缀)
],
// ....更多工作表(sheet)
],
];
// 插件调用
event('ExcelExport', $config);
```
##### 示例3:将数据库表通过模型导出为Excel文件
```php
// 插件配置
$config = [
'sheet' => [
[// 工作表配置
'head' => [
// 格式:'数据库字段名称' => 'Excel表头名称',
'name' => '姓名',
'age' => '年龄',
'tel' => '联系电话'
],
'source' => 'cmsModelTest',// 通过模型导出数据。格式:模块名+Model+模型名(驼峰命名)
],
// ....更多工作表(sheet)
],
];
// 插件调用
event('ExcelExport', $config);
```