导入 Excel

文档

文档:https://laravel-excel.com/
github:https://github.com/SpartnerNL/Laravel-Excel

安装

Laravel-Excel
composer require maatwebsite/excel

导入EXCEL为数组

$file = $request->file('file');

// $file 参数可以是$request->file('xxx'),也可以是文件路径 /path/to/file.xlsx
$export = \zxf\Office\Excel\Import::init($file);

// 验证文件
// 不论上传的文件名称是什么,在`validateFile`都使用`file`作为文件名进行验证
$export->validateFile(function () {
    $rule     = [
        'file' => 'required|file|max:2048|mimes:xlsx,xls,csv', // 文件最大2MB,仅限 xlsx, xls,csv 格式
    ];
    $messages = [
        'file.required' => '文件不能为空',
        'file.max'      => '文件大小不得超过2MB',
    ];
    return [$rule, $messages];
});

// 是否使用Excel列名作为数组的键名,默认为false,如果调用了setColumnMapping()方法,会自动设置为true
$export->useExcelColumnName(true);

// 使用列名映射 把A列映射为name,B列映射为email, 使用字段映射时没有设置映射的列会被忽略
$export->setColumnMapping([
    'A' => 'name', 
    'B' => 'email'
]);

// 读取Excel数据 范围:
// 第0张表读取第0~50行的内容,第1张表读取第8~400行的内容
$export->setReadRange(0,0,50)->setReadRange(1,8,400);

// 验证每行数据
$export->validateRow(function ($row, $rowIndex, $sheetIndex, $sheetName) {
     // $row: 当前验证行的数据
     // $rowIndex: 当前验证行的行号,从0开始
     // $sheetIndex: 当前验证的sheet表id,从0开始
     // $sheetName: 当前验证的sheet表名称

     // 验证方式一、直接返回 错误消息字符串
     return "「{$sheetName}」第{$rowIndex}行的邮箱号格式错误";

     // 验证方式二、返回验证器规则和错误消息数组
     $rules = [
         // 这里键值可能是数字(第n列)、英文字母(列名 eg:A,B,C...)或自定映射名称(通过 setColumnMapping 方法定义)
         'name' => 'required|min:2|max:25', // 文件最大2MB,仅限 xlsx, xls,csv 格式
     ];
     $messages = [
        'name.required' => '姓名不能为空',
         'name.min'      => '姓名至少2个字',
         'name.min'      => '姓名不能超过25个字',
     ];
     return [$rules,$messages];
});

return response()->json(['data' => $export->toArray()]);