3
votes

Importer CSV sur Maatwebsite / Laravel Excel 3.1 à l'aide d'Excel :: import

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?


2 commentaires

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.


3 Réponses :


0
votes

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


0 commentaires

0
votes

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'));

 }

Étapes à suivre pour utiliser une nouvelle version ..

  • Créer une importation pour exécuter cette commande dans cmd

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"**
    },
    


1 commentaires

Mais comment obtenir des données de fichier dans un tableau



4
votes

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];


0 commentaires