首页 > 解决方案 > Laravel:使用 Maatwebsite Excel 导入 Csv 文件

问题描述

我想使用Maatwebsite\Excel. 当我上传Excel文件时,它工作正常,但是当我尝试上传 csv 文件时,我遇到了错误Undefined offset: 1

我认为的问题是 csv 文件的分隔符(分隔符是 a ;),当我var_dump($row)的 excel 文件我有这个结果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 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])
        ]);
    }
}

标签: laravelmaatwebsite-excel

解决方案


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

您可以在此处查看完整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

如果要为每个 Import 类设置自定义 csv 设置;正如我从 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' => ";"
    ];
}

推荐阅读