Laravel:用Maatwebsite Excel导入Csv文件



我想用MaatwebsiteExcel上传一个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 AppHttpControllers;
use IlluminateHttpRequest;
use MaatwebsiteExcelFacadesExcel;
use AppImportsUsersImport;
class UserController extends Controller
{
/**
* @return IlluminateSupportCollection
*/
public function fileImportExport()
{
return view('file-import');
}
/**
* @return IlluminateSupportCollection
*/
public function fileImport(Request $request)
{
Excel::import(new UsersImport, $request->file('file')->store('temp'));
return back();
}
}

导入类

class UsersImport implements ToModel
{
/**
* @param array $row
*
* @return IlluminateDatabaseEloquentModel|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给

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

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

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

最新更新