✅ WEB ja WordPressi uudised, teemad, pistikprogrammid. Siin jagame näpunäiteid ja parimaid veebisaidi lahendusi.

Kuidas eksportida MySQL-i andmebaasiandmeid Excelisse PHP abil

15

Hiljuti avaldasin artikli Kuidas lugeda CSV- ja Exceli faile PHP-s PhpSpreadsheetiga ning üks lugejatest küsis MySQL-i andmebaasikirjete ekspordi kohta Exceli faili. Kasutajal võib olla vaja oma andmeid Exceli või CSV-failis, et nad saaksid neid hõlpsalt lugeda või jagada. Selles artiklis käsitlesime, kuidas saab andmeid andmebaasist eksportida Exceli ja CSV-failidesse. Lisaks sellele uurime ka seda, kuidas saab seda eksporditud faili manusena manusena saata.

Alustamine

Alustamiseks peate kõigepealt installima PhpSpreadsheet’i teegi. Teegi installimiseks soovitan kasutada Composerit. Avage terminal oma projekti juurkataloogis ja käivitage käsk:

composer require phpoffice/phpspreadsheet

PhpSpreadsheet on raamatukogu, mis pakub tuge erinevat tüüpi failivormingute lugemiseks ja kirjutamiseks. Allpool on ekraanipilt toetatud failivormingutest.

Kuidas eksportida MySQL-i andmebaasiandmeid Excelisse PHP abil

Meie eesmärk on andmebaasitabelite kirjete eksportimine Exceli / CSV-faili. Võtan näiteks toote tabeli. Loome andmebaasi tabeli ‘tooted’, käivitades alloleva päringu.

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;

Järgmisena lisage tabelisse mõned näivkirjed, nii et eksporditud failis näete mõnda kirjet.

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

Pärast seda looge db.phpfail, kuhu kirjutame andmebaasi ühenduse.

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

Asendage kohatäited ülaltoodud koodi tegelike väärtustega. Õpetuse järgmises osas eraldan eraldi jaotise andmete eksportimiseks Excelisse, CSV-sse ja meilisõnumi saatmiseks koos eksporditud failiga.

MySQL-i andmebaasiandmete eksportimine Excelisse PHP abil

Olete installinud kogu ja olete valmis mannekeenikirjetega andmebaasitabeliga. Nüüd võite jätkata ja kirjutada tegeliku koodi, mis ekspordib Exceli faili koos täidetud andmetega.

Looge index.phpfail juurkataloogis. Selles failis kirjutan andmebaasist andmete toomiseks päringu SELECT, kirjutan need andmed Excelisse ja panen need lõpuks automaatselt alla laadima.

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

Kui käivitate selle PHP-faili brauseris, hakkab Exceli fail automaatselt alla laadima ja sellel Exceli lehel on järgmine väljund.

Kuidas eksportida MySQL-i andmebaasiandmeid Excelisse PHP abil

MySQL-i andmebaasiandmete eksportimine CSV-faili kasutades PHP-d

Eelmises osas eksportisime andmed Exceli faili. Kui keegi soovib eksportida andmeid CSV-faili, peate ülaltoodud koodis muutma mõnda rida.

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

Saada meil, mille fail on manusena

Siiani oleme selles artiklis näinud, kuidas fail CSV ja Exceli vormingus alla laadida. Mõned kasutajad võivad soovida saata eksporditud faili e-kirja manusena. Vaatame, kuidas seda saavutada.

Esmalt installige PHPMaileri teek käsuga:

composer require phpmailer/phpmailer

Pärast teegi installimist saate meili saatmiseks kasutada mis tahes SMTP-serverit. See on sinu teha. Võite kasutada oma hostimise pakutavat SMTP-serverit, AWS SES-i või Gmaili SMTP-serverit. Kui kasutate Gmaili SMTP-serverit, lugege meie artiklit Saada meil Gmaili SMTP-serveri abil PHP-skriptist, mis selgitab selle jaoks vajalikku seadistamist.

Kood on varem kirjutatud, laadib faili automaatselt alla. Nüüd aga salvestame faili allalaaditavaks muutmise asemel kataloogi ja saadame selle seejärel manusena. Lühidalt öeldes on meil faili salvestamiseks allpool kood.

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

Meie lõplik kood manuse saatmiseks e-kirjaga on järgmine:

<?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;
}

Asendage kohatäited tegelike väärtustega ja meil saadetakse manusega saaja e-posti aadressile.

Loodan, et saate aru, kuidas MySQL-i andmebaasikirjeid Exceli või CSV-faili eksportida ja ka manusena saata. Palun jagage oma mõtteid ja ettepanekuid allpool olevas kommentaaride jaotises.

seotud artiklid

See veebisait kasutab teie kasutuskogemuse parandamiseks küpsiseid. Eeldame, et olete sellega rahul, kuid saate soovi korral loobuda. Nõustu Loe rohkem