Laravel: 使用 Maatwebsite 导入 Csv 文件 Excel

Laravel: Import Csv file with Maatwebsite Excel

我想使用 Maatwebsite\Excel 上传一个 csv 文件。当我上传 Excel 文件时它工作正常但是当我尝试上传 csv 文件时出现错误 Undefined offset: 1.

我认为问题出在 csv 文件的分隔符上(分隔符是 ;),当我 excel 文件的 var_dump($row) 时,我得到了这个结果 array(3) { [0]=> string(8) "user1CSV" [1]=> string(11) "a@gmail.com" [2]=> string(9) "azerty&23" } 但对于 csv 文件,结果是 array(1) { [0]=> string(31) "user1CSV;a1@gmail.com;azerty&23" }.

如何设置分隔符以接受 ExcelCsv 分隔符?我的代码是:

控制器

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Maatwebsite\Excel\Facades\Excel;
use App\Imports\UsersImport;

class UserController extends Controller
{
    /**
     * @return \Illuminate\Support\Collection
     */
    public function fileImportExport()
    {
        return view('file-import');
    }

    /**
     * @return \Illuminate\Support\Collection
     */
    public function fileImport(Request $request)
    {
        Excel::import(new UsersImport, $request->file('file')->store('temp'));
        return back();
    }
}

导入class

class UsersImport implements ToModel
{
    /**
    * @param array $row
    *
    * @return \Illuminate\Database\Eloquent\Model|null
    */
    public function model(array $row)
    {
        var_dump($row);
        return new User([
            'name'     => $row[0],
            'email'    => $row[1],
            'password' => Hash::make($row[2])
        ]);
    }
}

在您的 config/excel.php 文件中,您可以将 csv 数组中的 delimiter 设置为 ;

您可以在此处查看完整的 config/excel.php 文件:https://github.com/Maatwebsite/Laravel-Excel/blob/3.1/config/excel.php

并且第45行有一个csv.delimiter设置,默认设置,。您只需要将其更改为 ; https://github.com/Maatwebsite/Laravel-Excel/blob/3.1/config/excel.php#L45

如果您想为每个导入设置自定义 csv 设置 class;正如我从 Laravel Excel 文档中看到的那样,您可以设置自定义 csv 分隔符:https://docs.laravel-excel.com/3.1/imports/custom-csv-settings.html#available-settings

在您的 app\Imports\UsersImport.php 文件中,您可以通过添加以下方法将 delimiter 设置为 ;

public function getCsvSettings(): array
{
    return [
        'delimiter' => ";"
    ];
}