Actualités WEB et WordPress, thèmes, plugins. Ici, nous partageons des conseils et les meilleures solutions de sites Web.

Comment exporter des données de base de données MySQL vers Excel à l’aide de PHP

779

Récemment, j’ai publié un article Comment lire un fichier CSV et Excel en PHP à l’aide de PhpSpreadsheet et l’un des lecteurs a posé des questions sur l’exportation d’enregistrements de base de données MySQL vers un fichier Excel. L’utilisateur peut avoir besoin de ses données dans le fichier Excel ou CSV afin de pouvoir les lire ou les partager facilement. Dans cet article, nous avons expliqué comment exporter des données d’une base de données vers des fichiers Excel et CSV. En plus de cela, nous étudierons également comment on peut envoyer ce fichier exporté en pièce jointe dans l’email.

Commencer

Pour commencer, vous devez d’abord installer la bibliothèque PhpSpreadsheet. Je recommande d’utiliser Composer pour l’installation de la bibliothèque. Ouvrez le terminal dans le répertoire racine de votre projet et exécutez la commande :

composer require phpoffice/phpspreadsheet

PhpSpreadsheet est la bibliothèque qui prend en charge la lecture et l’écriture de différents types de formats de fichiers. Vous trouverez ci-dessous la capture d’écran des formats de fichiers pris en charge.

Comment exporter des données de base de données MySQL vers Excel à l'aide de PHP

Notre objectif final est d’exporter les enregistrements de table de base de données vers un fichier Excel/CSV. Je prends le tableau « produits » comme exemple. Créons une table « produits » dans la base de données en exécutant la requête ci-dessous.

CREATE TABLE `products` ( `id` int(11) NOT NULL AUTO_INCREMENT,
 `product_name` varchar(255) NOT NULL,
 `product_sku` varchar(255) NOT NULL,
 `product_price` varchar(255) NOT NULL,
 PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Ensuite, ajoutez quelques entrées factices dans le tableau afin que vous puissiez voir quelques enregistrements dans le fichier exporté.

INSERT INTO `products` (`id`, `product_name`, `product_sku`, `product_price`) VALUES
(1, 'Apple', 'app_111', '$1000'),
(2, 'Lenovo', 'len_222', '$999'),
(3, 'Samsung', 'sam_689', '$1200'),
(4, 'Acer', 'ace_620', '$900');

Après cela, créez un db.phpfichier dans lequel nous écrirons la connexion à la base de données.

db.php

<?php
$db_host = 'DATABASE_HOST';
$db_username = 'DATABASE_USERNAME';
$db_password = 'DATABASE_PASSWORD';
$db_name = 'DATABASE_NAME';
 
$db = new mysqli($db_host, $db_username, $db_password, $db_name);
 
if($db->connect_error){
    die("Unable to connect database: ". $db->connect_error);
}

Assurez-vous de remplacer les espaces réservés par les valeurs réelles dans le code ci-dessus. Dans la prochaine partie du didacticiel, j’alloue une section distincte sur l’exportation de données vers Excel, vers CSV et l’envoi de l’e-mail avec un fichier exporté en pièce jointe.

Exporter les données de la base de données MySQL vers Excel à l’aide de PHP

Vous avez installé la bibliothèque et êtes prêt avec une table de base de données avec des entrées factices. Vous pouvez maintenant écrire le code réel qui exportera un fichier Excel contenant des données.

Créez un index.phpfichier dans le répertoire racine. Dans ce fichier, je vais écrire une requête SELECT pour récupérer les données de la base de données, écrire ces données dans Excel et enfin les télécharger automatiquement.

index.php

<?php
require_once "vendor/autoload.php";
require_once "db.php";
 
use PhpOfficePhpSpreadsheetSpreadsheet;
use PhpOfficePhpSpreadsheetWriterXlsx;
 
$spreadsheet = new Spreadsheet();
$Excel_writer = new Xlsx($spreadsheet);
 
$spreadsheet->setActiveSheetIndex(0);
$activeSheet = $spreadsheet->getActiveSheet();
 
$activeSheet->setCellValue('A1', 'Product Name');
$activeSheet->setCellValue('B1', 'Product SKU');
$activeSheet->setCellValue('C1', 'Product Price');
 
$query = $db->query("SELECT * FROM products ORDER BY id DESC");
 
if($query->num_rows > 0) {
    $i = 2;
    while($row = $query->fetch_assoc()) {
        $activeSheet->setCellValue('A'.$i, $row['product_name']);
        $activeSheet->setCellValue('B'.$i, $row['product_sku']);
        $activeSheet->setCellValue('C'.$i, $row['product_price']);
        $i++;
    }
}
 
$filename = 'products.xlsx';
 
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename='. $filename);
header('Cache-Control: max-age=0');
$Excel_writer->save('php://output');

Lorsque vous exécutez ce fichier PHP sur un navigateur, un fichier Excel commencera à se télécharger automatiquement et cette feuille Excel aura la sortie suivante.

Comment exporter des données de base de données MySQL vers Excel à l'aide de PHP

Exporter les données de la base de données MySQL au format CSV à l’aide de PHP

Dans la section précédente, nous avons exporté des données vers un fichier Excel. Si quelqu’un cherche à exporter des données dans un fichier CSV, vous devez modifier quelques lignes dans le code ci-dessus.

csv.php

<?php
require_once "vendor/autoload.php";
require_once "db.php";
 
use PhpOfficePhpSpreadsheetSpreadsheet;
use PhpOfficePhpSpreadsheetWriterCsv;
 
$spreadsheet = new Spreadsheet();
$Excel_writer = new Csv($spreadsheet);
 
$spreadsheet->setActiveSheetIndex(0);
$activeSheet = $spreadsheet->getActiveSheet();
 
$activeSheet->setCellValue('A1', 'Product Name');
$activeSheet->setCellValue('B1', 'Product SKU');
$activeSheet->setCellValue('C1', 'Product Price');
 
$query = $db->query("SELECT * FROM products ORDER BY id DESC");
 
if($query->num_rows > 0) {
    $i = 2;
    while($row = $query->fetch_assoc()) {
        $activeSheet->setCellValue('A'.$i, $row['product_name']);
        $activeSheet->setCellValue('B'.$i, $row['product_sku']);
        $activeSheet->setCellValue('C'.$i, $row['product_price']);
        $i++;
    }
}
 
$filename = 'products.csv';
 
header('Content-Type: application/text-csv');
header('Content-Disposition: attachment;filename='. $filename);
header('Cache-Control: max-age=0');
$Excel_writer->save('php://output');

Envoyer un e-mail avec un fichier en pièce jointe

Jusqu’à présent dans cet article, nous avons vu comment télécharger le fichier au format CSV et Excel. Certains utilisateurs peuvent souhaiter envoyer le fichier exporté en pièce jointe dans l’e-mail. Voyons comment y parvenir.

Installez d’abord la bibliothèque PHPMailer à l’aide de la commande :

composer require phpmailer/phpmailer

Après avoir installé la bibliothèque, vous pouvez utiliser n’importe quel serveur SMTP pour envoyer un e-mail. C’est à vous. Vous pouvez utiliser le serveur SMTP fourni par votre hébergement, AWS SES ou le serveur SMTP Gmail. Si vous utilisez le serveur SMTP de Gmail, lisez notre article Envoyer un e-mail à l’aide du serveur SMTP de Gmail à partir d’un script PHP qui explique la configuration nécessaire.

Le code écrit préalablement télécharge automatiquement le fichier. Mais maintenant, au lieu de le rendre téléchargeable, nous allons enregistrer le fichier dans le répertoire, puis l’envoyer en pièce jointe. En bref, nous aurons le code ci-dessous pour enregistrer le fichier.

...
$filename = 'products.csv';
 
if (!file_exists('files')) {
    mkdir('files', 0755);
}
$Excel_writer->save('files/'.$filename);

Notre code final pour envoyer une pièce jointe dans un e-mail sera le suivant :

<?php
require_once "vendor/autoload.php";
require_once "db.php";
 
use PhpOfficePhpSpreadsheetSpreadsheet;
use PhpOfficePhpSpreadsheetWriterCsv;
 
//Import PHPMailer classes into the global namespace
use PHPMailerPHPMailerPHPMailer;
use PHPMailerPHPMailerException;
 
$spreadsheet = new Spreadsheet();
$Excel_writer = new Csv($spreadsheet);
 
$spreadsheet->setActiveSheetIndex(0);
$activeSheet = $spreadsheet->getActiveSheet();
 
$activeSheet->setCellValue('A1', 'Product Name');
$activeSheet->setCellValue('B1', 'Product SKU');
$activeSheet->setCellValue('C1', 'Product Price');
 
$query = $db->query("SELECT * FROM products ORDER BY id DESC");
 
if($query->num_rows > 0) {
    $i = 2;
    while($row = $query->fetch_assoc()) {
        $activeSheet->setCellValue('A'.$i, $row['product_name']);
        $activeSheet->setCellValue('B'.$i, $row['product_sku']);
        $activeSheet->setCellValue('C'.$i, $row['product_price']);
        $i++;
    }
}
 
$filename = 'products.csv';
 
if (!file_exists('files')) {
    mkdir('files', 0755);
}
$Excel_writer->save('files/'.$filename);
 
// send as an attachment
$mail = new PHPMailer(true);
try {
    $mail->isSMTP();
    $mail->Host = 'SMTP_HOST';
    $mail->SMTPAuth = true;
    $mail->Username = 'SMTP_USERNAME';   //username
    $mail->Password = 'SMTP_PASSWORD';   //password
    $mail->SMTPSecure = 'ssl';
    $mail->Port = 465;
 
    $mail->setFrom('FROM_EMAIL_ADDRESS', 'FROM_NAME');
    $mail->addAddress('RECEPIENT_EMAIL_ADDRESS', 'RECEPIENT_NAME');
  
    $mail->addAttachment('files/'.$filename);
  
    $mail->isHTML(true);
    $mail->Subject = 'Our Exported File';
    $mail->Body    = 'Our Exported File';
  
    $mail->send();
    echo 'Message has been sent';
} catch (Exception $e) {
    echo 'Message could not be sent. Mailer Error: '. $mail->ErrorInfo;
}

Remplacez les espaces réservés par les valeurs réelles et l’e-mail sera envoyé avec une pièce jointe à l’adresse e-mail du destinataire.

J’espère que vous comprenez comment exporter des enregistrements de base de données MySQL vers un fichier Excel ou CSV et également l’envoyer en pièce jointe. S’il vous plaît partager vos pensées et suggestions dans la section commentaires ci-dessous.

Articles Liés

Source d’enregistrement: artisansweb.net

Ce site utilise des cookies pour améliorer votre expérience. Nous supposerons que cela vous convient, mais vous pouvez vous désinscrire si vous le souhaitez. J'accepte Plus de détails