我想用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" }
。
如何设置分隔符以接受Excel
和Csv
分隔符?我的代码是:
控制器
<?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' => ";"
];
}