Php 使用Excel::Import在Maatwebsite/Laravel Excel 3.1上导入CSV
我已将Maatwebsite/Laravel Excel从2.1升级到3.1。有些方法已被弃用 下面是2.1版的代码Php 使用Excel::Import在Maatwebsite/Laravel Excel 3.1上导入CSV,php,laravel,maatwebsite-excel,laravel-excel,Php,Laravel,Maatwebsite Excel,Laravel Excel,我已将Maatwebsite/Laravel Excel从2.1升级到3.1。有些方法已被弃用 下面是2.1版的代码 $data = Excel::load($path, function($reader) {})->get()->toArray(); 当我使用2.1时,它工作正常,但升级后,它出错了 调用未定义的方法Maatwebsite\Excel\Excel::load() 对于3.1版,我尝试更改为 $data = Excel::import($path, function
$data = Excel::load($path, function($reader) {})->get()->toArray();
当我使用2.1时,它工作正常,但升级后,它出错了
调用未定义的方法Maatwebsite\Excel\Excel::load()
对于3.1版,我尝试更改为
$data = Excel::import($path, function($reader) {})->get()->toArray();
我知道这可能不是正确的语法
这里是我使用2.1开发时的完整代码
$path = $request->file('csv_file')->getRealPath();
if ($request->has('header')) {
$data = Excel::import($path, function($reader) {})->get()->toArray();
} else {
$data = array_map('str_getcsv', file($path));
}
if (count($data) > 0) {
if ($request->has('header')) {
$csv_header_fields = [];
foreach ($data[0] as $key => $value) {
$csv_header_fields[] = $key;
}
}
$csv_data = array_slice($data, 0, 8);
$csv_data_file = CsvData::create([
'csv_filename' => $request->file('csv_file')->getClientOriginalName(),
'csv_header' => $request->has('header'),
'csv_data' => json_encode($data)
]);
} else {
return redirect()->back();
}
return view('import.import_field', compact( 'csv_header_fields', 'csv_data', 'csv_data_file'));
如何在3.1版上修复此错误?导入()方法的第一个参数在3.1版中不再是文件的路径,而是必须创建的导入文件的类名 在此导入文件中,可以定义如何读取图纸,以及要将图纸转换为何种格式,例如模型或集合 从2.1迁移到3.1的最简单方法是通过运行(在您的情况下)创建这样的导入类: 如果您想一次读取所有至行,如在问题代码中,您可以使用导入文件中的
来收集
关注点:
use Illuminate\Support\Collection;
use Maatwebsite\Excel\Concerns\ToCollection;
class CsvDataImport implements ToCollection
{
public function collection(Collection $rows)
{
// Use the $rows collection to create your CsvData model.
}
}
在控制器中,可以按如下方式调用导入:
use App\Imports\CsvDataImport;
use Maatwebsite\Excel\Excel;
Excel::import(new CsvDataImport, $path);
您可以阅读有关导入到集合的详细信息不要返回降级,您可以使用最简单的导入方法轻松使用新的更新版本(“maatwebsite/excel”:“~3.1.0”) 更新Composer.json
"require": {
**"maatwebsite/excel": "~3.1.0"**
},
使用新版本的步骤。。
- 创建导入以在cmd中运行此命令
php artisan make:import UsersImport
- 它将在app\imports\UserImport.php中创建导入
<?php namespace App\Imports; use Illuminate\Support\Collection; use Maatwebsite\Excel\Concerns\ToCollection; use Maatwebsite\Excel\Concerns\WithHeadingRow; class UserImport implements ToCollection,WithHeadingRow { public function collection(Collection $rows) { return $rows; } // headingRow function is use for specific row heading in your xls file public function headingRow(): int { return 3; } } ?>
$path = $request->file('csv_file')->getRealPath();
$data = \Excel::toArray('', $path, null, \Maatwebsite\Excel\Excel::TSV)[0];
最让我困扰的是,供应商地图是荷兰语的对不起,只是我的意见你的意思是什么?除了“Maatwebsite”之外,所有内容都是英文的,因为这恰好是开发包的公司的荷兰名称。但是如何获取数组中的文件数据呢
use Excel;
public function importExcel(Request $request) {
$import = new UsersImport();
$data = \Excel::import($import, request()->file('import_file'));
}
$path = $request->file('csv_file')->getRealPath();
$data = \Excel::toArray('', $path, null, \Maatwebsite\Excel\Excel::TSV)[0];