You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:05:51