使用 Excel::import 在 Maatwebsite / Laravel Excel 3.1 上导入 CSV

shh*_*rzl 3 php laravel laravel-excel maatwebsite-excel

我已将 Maatwebsite/Laravel-Excel 从 2.1 升级到 3.1。某些方法已被弃用。

这是 2.1 版的代码。

$data = Excel::load($path, function($reader) {})->get()->toArray();
Run Code Online (Sandbox Code Playgroud)

当我使用 2.1 时它可以工作,但升级后,它是错误的

调用未定义的方法 Maatwebsite\Excel\Excel::load()

对于 3.1 版,我尝试更改为

$data = Excel::import($path, function($reader) {})->get()->toArray();
Run Code Online (Sandbox Code Playgroud)

我知道这可能不是正确的语法。

这是我使用 2.1 开发时的完整代码。

$path = $request->file('csv_file')->getRealPath();

    if ($request->has('header')) {
        $data = Excel::import($path, function($reader) {})->get()->toArray();
    } else {
        $data = array_map('str_getcsv', file($path));
    }

    if (count($data) > 0) {
        if ($request->has('header')) {
            $csv_header_fields = [];
            foreach ($data[0] as $key => $value) {
                $csv_header_fields[] = $key;
            }
        }
        $csv_data = array_slice($data, 0, 8);

        $csv_data_file = CsvData::create([
            'csv_filename' => $request->file('csv_file')->getClientOriginalName(),
            'csv_header' => $request->has('header'),
            'csv_data' => json_encode($data)
        ]);
    } else {
        return redirect()->back();
    }

    return view('import.import_field', compact( 'csv_header_fields', 'csv_data', 'csv_data_file'));
Run Code Online (Sandbox Code Playgroud)

如何在 3.1 版上修复此错误?

小智 6

实际上,在 Maatwebsite/Laravel-Excel 版本 3 中,不需要为 Excel 导入创建任何额外的类。基本上,您可以以与版本 2 中几乎相同的方式进行整个 CSV 到数组的转换:

    $path = $request->file('csv_file')->getRealPath();
    $data = \Excel::toArray('', $path, null, \Maatwebsite\Excel\Excel::TSV)[0];
Run Code Online (Sandbox Code Playgroud)