J'ai mis à jour Maatwebsite / Laravel-Excel vers la version 3.1 à partir de la version 2.1. Certaines méthodes sont obsolètes.
Voici le code de la version 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'));
Cela fonctionne quand j'ai utilisé la version 2.1 mais après la mise à jour, c'est une erreur
Appel à la méthode non définie Maatwebsite \ Excel \ Excel :: load ()
Pour la version 3.1, j'ai essayé de passer à
$data = Excel::import($path, function($reader) {})->get()->toArray();
Je sais que ce n'est probablement pas la syntaxe correcte.
Voici mon code lors du développement en utilisant 2.1.
$data = Excel::load($path, function($reader) {})->get()->toArray();
Comment corriger cette erreur sur la version 3.1?
3 Réponses :
Le premier paramètre de la méthode import ()
n'est plus le chemin du fichier dans 3.1, mais le nom de classe du fichier d'importation que vous devez créer.
Dans ce fichier d'importation, vous pouvez définir comment vous souhaitez lire la feuille et dans quel format vous souhaitez la convertir, par exemple un modèle ou une collection.
La façon la plus simple de migrer de la 2.1 vers la 3.1 est de créer une telle classe d'importation en exécutant (dans votre cas):
use App\Imports\CsvDataImport; use Maatwebsite\Excel\Excel; Excel::import(new CsvDataImport, $path);
Si vous voulez lire tous les lignes à la fois, comme dans le code de votre question, vous pouvez utiliser la préoccupation ToCollection
dans votre fichier d'importation:
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. } }
Dans votre contrôleur, vous peut appeler l'importation comme ceci:
php artisan make:import CsvDataImport
Vous pouvez en savoir plus sur l'importation dans une collection ici
Ne revenez pas à la rétrogradation, vous pouvez facilement utiliser la nouvelle version mise à jour ( "maatwebsite / excel": "~ 3.1.0" ) avec la méthode d'importation la plus simple.
Mettez à jour votre compositeur. json ..
use Excel; public function importExcel(Request $request) { $import = new UsersImport(); $data = \Excel::import($import, request()->file('import_file')); }
php artisan make: import UsersImport
Il créera une importation dans app \ importations \ 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; } } ?>
Dans votre fichier Controller ..
"require": { **"maatwebsite/excel": "~3.1.0"** },
Mais comment obtenir des données de fichier dans un tableau
En fait, il n'est pas nécessaire de créer des classes supplémentaires pour l'importation Excel dans Maatwebsite / Laravel-Excel version 3. Fondamentalement, vous pouvez effectuer la conversion entière CSV en tableau presque de la même manière que dans la version 2:
$path = $request->file('csv_file')->getRealPath(); $data = \Excel::toArray('', $path, null, \Maatwebsite\Excel\Excel::TSV)[0];
ce qui me dérange le plus, c'est que la carte des vendeurs est en néerlandais désolé juste mon avis
Que voulez-vous dire @Eningly? Tout est en anglais, à l'exception de "Maatwebsite" parce que c'est le nom néerlandais de la société qui a développé le package.