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