importer un fichier excel dans laravel

Comment importer un fichier Excel dans Laravel

Partagez sur:

Dans ce tutoriel, vous allez apprendre comment importer un fichier Excel dans Laravel.

Ici, pour importer des données de fichier Excel, nous utiliserons le package Maatwebsite.

 

LIRE AUSSI: Comment générer des fichiers PDF dans Laravel 8

 

En utilisant ce package, nous pouvons facilement importer des données à partir d’une feuille Excel et les insérer dans un tableau dans l’application Laravel.

Dans certaines des entreprises dans lesquelles un grand nombre de données ont été stockées dans Excel, et après avoir stocké ces données, ils souhaitent une application qui les aide à les stocker dans une base de données d’applications Web, c’est-à-dire à importer dans une base de données d’applications Web.

LIRE AUSSI: Comment créer une pagination dans Laravel 8 avec Bootstrap 4

 

Ensuite, à ce moment-là, si votre application Web a été créée avec le Framework Laravel, cet article est fait pour vous.

Dans cet article, nous verrons ou apprendrons comment importer n’importe quel type de feuille de calcul Excel au format .xls, .xlsx ou des données CSV dans une base de données Mysql avec Laravel.

Importer un fichier Excel dans Laravel

Pour importer un fichier Excel dans Laravel nous allons suivre les étapes ci-dessous :

LIRE AUSSI: Comment installer Bootstrap 4 dans Laravel

Étape 1 – Créer une table dans MySQL

Tout d’abord, nous devons créer une table dans la base de données Mysql, alors exécutez le script SQL suivant, cela créera une table tbl_customer dans votre base de données.

--
-- Database: `testing`
--

-- --------------------------------------------------------

--
-- Table structure for table `tbl_customer`
--

CREATE TABLE `tbl_customer` (
  `CustomerID` int(11) NOT NULL,
  `CustomerName` varchar(250) NOT NULL,
  `Gender` varchar(30) NOT NULL,
  `Address` text NOT NULL,
  `City` varchar(250) NOT NULL,
  `PostalCode` varchar(30) NOT NULL,
  `Country` varchar(100) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

--
-- Indexes for table `tbl_customer`
--
ALTER TABLE `tbl_customer`
  ADD PRIMARY KEY (`CustomerID`);

--
-- AUTO_INCREMENT for dumped tables
--

--
-- AUTO_INCREMENT for table `tbl_customer`
--
ALTER TABLE `tbl_customer`
  MODIFY `CustomerID` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=146;

 

Étape 2 – Connexion à la base de données Mysql dans Laravel

Après cela, vous devez établir une connexion à la base de données. Pour cela, vous devez d’abord ouvrir le fichier database.php à partir de config.

Et dans ce fichier, vous devez définir votre configuration de base de données.

<?php

return [


    'default' => env('DB_CONNECTION', 'mysql'),

...........

        'mysql' => [
            'driver' => 'mysql',
            'host' => env('DB_HOST', 'localhost'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'testing'),
            'username' => env('DB_USERNAME', 'root'),
            'password' => env('DB_PASSWORD', ''),
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'strict' => true,
            'engine' => null,
        ],

.............

];

 

Après cela, vous devez ouvrir le fichier .env, et dans ce fichier, vous devez également définir la configuration de la base de données Mysql.

DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=testing
DB_USERNAME=root
DB_PASSWORD=

 

Étape 3 – Télécharger le package Maatwebsite

Si vous souhaitez importer un fichier Excel dans Laravel, vous devez d’abord télécharger le package Maatwebsite, ce package va nous permettre de communique avec les données de la feuille de calcul Excel.

Tout d’abord, pour télécharger le package, vous devez accéder à l’invite de commande et écrire la commande suivante.

composer require maatwebsite/excel

 

Cette commande téléchargera ce package dans votre dossier de travail Laravel.

Après cela, nous devons enregistrer ce package dans notre application Laravel.

Pour cela, nous devons aller dans le fichier config/app.php. Et dans ce fichier, vous devez définir les fournisseurs et les alias.

<?php

return [

........

    'providers' => [

.......

        Maatwebsite\Excel\ExcelServiceProvider::class,

    ],

    'aliases' => [

........
        
        'Excel' => Maatwebsite\Excel\Facades\Excel::class,

    ],

];

 

De cette façon, nous pouvons enregistrer le package Maatwebsite dans l’application Laravel, nous pouvons maintenant utiliser ce package pour importer des données de fichier Excel.

Étape 4 – Créer un contrôleur

Nous devons maintenant créer un contrôleur pour gérer la demande http pour l’importer le fichier Excel. Nous apperlerons ce fichier : ImportExcelController.php

Dans ce contrôleur, nous avons utilisé deux instructions use.

La première est utilisée pour les opérations de base de données mysql, et la deuxième est pour le package Maatwebsite pour l’importation de données de feuille Excel.

Dans ce contrôleur, nous avons deux méthodes.

index() – Cette méthode récupérera les données de la table client et ces données seront chargées dans un tableau dans le fichier import_blade.php.

import() – Cette méthode permettra d’importer le fichier Excel.

Dans cette méthode, il faut d’abord valider le format de fichier Excel.

Si un fichier sélectionné autre qu’une feuille Excel, il renverra une erreur de validation. Mais supposons que le fichier sélectionné soit Excel, il procédera à l’importation des données.

Pour importer des données ici, on a appelé la classe Excel du package qui contiendra les données du fichier Excel et les convertir en tableau PHP, puis les insérer dans la table client.

Après l’importation réussie des données, il renverra un message de réussite.

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use DB;
use Excel;

class ImportExcelController extends Controller
{
    function index()
    {
     $data = DB::table('tbl_customer')->orderBy('CustomerID', 'DESC')->get();
     return view('import_excel', compact('data'));
    }

    function import(Request $request)
    {
     $this->validate($request, [
      'select_file'  => 'required|mimes:xls,xlsx'
     ]);

     $path = $request->file('select_file')->getRealPath();

     $data = Excel::load($path)->get();

     if($data->count() > 0)
     {
      foreach($data->toArray() as $key => $value)
      {
       foreach($value as $row)
       {
        $insert_data[] = array(
         'CustomerName'  => $row['customer_name'],
         'Gender'   => $row['gender'],
         'Address'   => $row['address'],
         'City'    => $row['city'],
         'PostalCode'  => $row['postal_code'],
         'Country'   => $row['country']
        );
       }
      }

      if(!empty($insert_data))
      {
       DB::table('tbl_customer')->insert($insert_data);
      }
     }
     return back()->with('success', 'Excel Data Imported successfully.');
    }
}

 

Étape 5 – Créer un fichier vue

Ce fichier a été chargé par la méthode index () d’ImportExcelController. Dans ce fichier, nous avons créé un formulaire pour sélectionner un fichier Excel à partir d’un ordinateur local pour importer des données.

Sous le formulaire, il affichera les données de la table tbl_customer. Et au-dessus du formulaire, nous avons défini un message d’erreur de validation d’affichage et un message de réussite.

<!DOCTYPE html>
<html>
 <head>
  <title>Import Excel File in Laravel</title>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script>
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" />
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
 </head>
 <body>
  <br />
  
  <div class="container">
   <h3 align="center">Import Excel File in Laravel</h3>
    <br />
   @if(count($errors) > 0)
    <div class="alert alert-danger">
     Upload Validation Error<br><br>
     <ul>
      @foreach($errors->all() as $error)
      <li>{{ $error }}</li>
      @endforeach
     </ul>
    </div>
   @endif

   @if($message = Session::get('success'))
   <div class="alert alert-success alert-block">
    <button type="button" class="close" data-dismiss="alert">×</button>
           <strong>{{ $message }}</strong>
   </div>
   @endif
   <form method="post" enctype="multipart/form-data" action="{{ url('/import_excel/import') }}">
    {{ csrf_field() }}
    <div class="form-group">
     <table class="table">
      <tr>
       <td width="40%" align="right"><label>Select File for Upload</label></td>
       <td width="30">
        <input type="file" name="select_file" />
       </td>
       <td width="30%" align="left">
        <input type="submit" name="upload" class="btn btn-primary" value="Upload">
       </td>
      </tr>
      <tr>
       <td width="40%" align="right"></td>
       <td width="30"><span class="text-muted">.xls, .xslx</span></td>
       <td width="30%" align="left"></td>
      </tr>
     </table>
    </div>
   </form>
   
   <br />
   <div class="panel panel-default">
    <div class="panel-heading">
     <h3 class="panel-title">Customer Data</h3>
    </div>
    <div class="panel-body">
     <div class="table-responsive">
      <table class="table table-bordered table-striped">
       <tr>
        <th>Customer Name</th>
        <th>Gender</th>
        <th>Address</th>
        <th>City</th>
        <th>Postal Code</th>
        <th>Country</th>
       </tr>
       @foreach($data as $row)
       <tr>
        <td>{{ $row->CustomerName }}</td>
        <td>{{ $row->Gender }}</td>
        <td>{{ $row->Address }}</td>
        <td>{{ $row->City }}</td>
        <td>{{ $row->PostalCode }}</td>
        <td>{{ $row->Country }}</td>
       </tr>
       @endforeach
      </table>
     </div>
    </div>
   </div>
  </div>
 </body>
</html>

 

Étape 6 – Définir une route

Après cela, nous devons définir la route de la méthode du contrôleur.

Pour cela, nous devons ouvrir le fichier routes/web.php. Dans ce fichier, nous pouvons définir route.

<?php

.......

Route::get('/import_excel', 'ImportExcelController@index');
Route::post('/import_excel/import', 'ImportExcelController@import');

 

Étape 7 – Exécutez l’application Laravel

Enfin, nous devons exécuter l’application Laravel, pour cela, nous devons aller dans l’invite de commande et écrire la commande suivante.

php artisan serve

 

Cette commande sera l’application Laravel, elle renverra l’URL de base de l’application Laravel. Maintenant, pour cette application, nous devons écrire l’URL suivante dans le navigateur.

http://127.0.0.1:8000/import_excel

Conclusion

Dans ce tutoriel, nous avons appris, comment faire pour importer un fichier Excel dans Laravel à l’aide du package Maatwebsite.


Partagez sur: