如何在Laravel-Excel 3.1.9版本中将Excel文件转为数组
解决Laravel-Excel 3.x版本将Excel转为数组的问题
嘿,我刚好熟悉Laravel-Excel 3.x的用法,你遇到的问题是因为3.x版本彻底重构了,移除了旧版的load方法,改用Import类的方式来处理Excel导入,下面给你一步步的解决思路和代码示例:
核心思路
Laravel-Excel 3.x使用「导入类」来封装Excel的解析逻辑,我们只需要创建一个实现ToArray接口的Import类,然后通过Excel::import()方法就能直接拿到转换后的数组,完全不需要存入数据库或者下载文件。
步骤1:创建Import类
首先在你的项目里新建app/Imports目录(如果还没有的话),然后创建一个SalesOrderImport.php文件,代码如下:
namespace App\Imports; use Maatwebsite\Excel\Concerns\ToArray; // 如果需要把表头作为数组键,就加上下面这个接口 use Maatwebsite\Excel\Concerns\WithHeadingRow; // 同时实现ToArray和WithHeadingRow,就能得到带表头的关联数组 class SalesOrderImport implements ToArray, WithHeadingRow { public function array(array $rows) { // $rows已经是转换后的数组了,这里可以做一些预处理: // 比如过滤空行、处理数据格式等 // 直接返回即可 return $rows; } }
- 如果不需要表头(只需要索引数组),去掉
WithHeadingRow接口即可,此时$rows里的每一项是纯索引数组。 - 加上
WithHeadingRow后,Excel的第一行会被作为数组的键,返回的是关联数组,更便于后续使用。
步骤2:在控制器中调用转换逻辑
在你的控制器方法里,处理上传的Excel文件并转换为数组:
use App\Imports\SalesOrderImport; use Maatwebsite\Excel\Facades\Excel; use Illuminate\Http\Request; public function convertToExcelArray(Request $request) { // 先验证上传的文件格式 $request->validate([ 'sampledata' => 'required|mimes:xlsx,xls,csv', ]); // 获取上传的文件实例 $uploadedFile = $request->file('sampledata'); // 调用Excel::import方法,传入Import类实例,直接得到数组 $excelArray = Excel::import(new SalesOrderImport, $uploadedFile); // 这里就可以直接使用$excelArray了,比如返回JSON return response()->json($excelArray); }
额外说明
- 如果你需要更精细的控制(比如只导入特定列、处理单元格格式),可以在Import类里实现更多Laravel-Excel提供的接口,比如
WithStartRow(指定从第几行开始导入)、WithCustomCsvSettings(处理CSV的分隔符等)。 - 3.x版本的设计理念是把导入逻辑封装在单独的类里,这样代码更清晰、可复用,比旧版的
load闭包方式更易于维护。
内容的提问来源于stack exchange,提问作者Niklesh Raut
相关产品推荐
相关产品推荐

