Comment exporter des données de base de données MySQL vers Excel à l’aide de PHP
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.
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.php
fichier 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.php
fichier 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.
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
- Comment transférer des fichiers vers un serveur distant en PHP
- Envoyer un e-mail à l’aide de Mailjet (alternative au serveur SMTP de Gmail) en PHP
- Comment convertir du HTML en PDF en PHP