สวัสดีครับ ต่อจากตอนที่แล้ว ที่เราได้แนะนำการอ่านข้อมูลจากไฟล์ Excel และ Import เข้าฐานข้อมูล MySQL
https://monkeywebstudio.com/read-excel-file-with-phpspreadsheet/
ในตอนนี้เราจะมาทำการ Export ข้อมูลเป็น ไฟล์ Excel กันดูบ้างครับ
สำหรับบทความนี้เราจะใช้ Library phpSpreadsheet กันครับ
สำหรับใครที่ยังไม่ได้ติดตั้งให้ลองดูจากบทความก่อนหน้าได้เลยครับ
ตัวอย่าง Code สำหรับ Export Excel File
<?php require '../vendor/autoload.php'; use PhpOffice\PhpSpreadsheet\IOFactory; use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Writer\Xlsx; // Create new Spreadsheet object $spreadsheet = new Spreadsheet(); // Set document properties $spreadsheet->getProperties()->setCreator('Maarten Balliauw') ->setLastModifiedBy('Maarten Balliauw') ->setTitle('Office 2007 XLSX Test Document') ->setSubject('Office 2007 XLSX Test Document') ->setDescription('Test document for Office 2007 XLSX, generated using PHP classes.') ->setKeywords('office 2007 openxml php') ->setCategory('Test result file'); // Add some data $spreadsheet->setActiveSheetIndex(0) ->setCellValue('A1', 'ลำดับ') ->setCellValue('B1', 'ชื่อ') ->setCellValue('C1', 'เบอร์โทร'); $spreadsheet->setActiveSheetIndex(0) ->setCellValue('A2', '1') ->setCellValue('B2', 'วรรณชนก พ่วงทรัพย์') ->setCellValue('C2', '0928679411'); $spreadsheet->setActiveSheetIndex(0) ->setCellValue('A3', '2') ->setCellValue('B3', 'อรทัย ฤทธิรงค์') ->setCellValue('C3', '0925392364'); $spreadsheet->setActiveSheetIndex(0) ->setCellValue('A4', '3') ->setCellValue('B4', 'สมพงษ์ อนุภาพ') ->setCellValue('C4', '0914495989'); $spreadsheet->setActiveSheetIndex(0) ->setCellValue('A5', '4') ->setCellValue('B5', 'ณิชกานต์ สุขแจ่ม') ->setCellValue('C5', '0989356019'); // Rename worksheet $spreadsheet->getActiveSheet()->setTitle('Simple'); // Set active sheet index to the first sheet, so Excel opens this as the first sheet $spreadsheet->setActiveSheetIndex(0); // Redirect output to a client’s web browser (Xlsx) header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); header('Content-Disposition: attachment;filename="01simple.xlsx"'); header('Cache-Control: max-age=0'); // If you're serving to IE 9, then the following may be needed header('Cache-Control: max-age=1'); // If you're serving to IE over SSL, then the following may be needed header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); // always modified header('Cache-Control: cache, must-revalidate'); // HTTP/1.1 header('Pragma: public'); // HTTP/1.0 $writer = IOFactory::createWriter($spreadsheet, 'Xlsx'); $writer->save('php://output'); exit;
ผลการทำงาน เมื่อรัน Code นี้จะมีการ Download Excel File มาทาง Browser ครับ
การ Export ไฟล์ Excel จาก ฐานข้อมูล MySQL
ตัวอย่างข้อมูลที่ต้องการ Export Excel File
สร้างDatabase ชื่อ demo และ ตารางตัวอย่างสำหรับ Export ข้อมูลดังนี้
CREATE TABLE `customer` ( `id` int(11) NOT NULL AUTO_INCREMENT, `customer_code` varchar(255) DEFAULT NULL, `customer_name` varchar(255) DEFAULT NULL, `customer_address` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8; INSERT INTO `customer` (`id`, `customer_code`, `customer_name`, `customer_address`) VALUES (1, '789-62-9574', 'Devpoint', '538 Nova Drive'), (2, '413-60-4947', 'Jaxnation', '15293 Kennedy Alley'), (3, '101-31-2038', 'Thoughtblab', '850 Darwin Junction'), (4, '658-24-9441', 'Jabberstorm', '6 Tomscot Terrace'), (5, '745-20-6332', 'Cogibox', '529 Acker Hill');
เพิ่ม Code การเชื่อมต่อฐานข้อมูลและ การ Export Excel ดังนี้
<?php require '../vendor/autoload.php'; use PhpOffice\PhpSpreadsheet\IOFactory; use PhpOffice\PhpSpreadsheet\Spreadsheet; use PhpOffice\PhpSpreadsheet\Writer\Xlsx; // Create new Spreadsheet object $spreadsheet = new Spreadsheet(); // Set document properties $spreadsheet->getProperties()->setCreator('Maarten Balliauw') ->setLastModifiedBy('Maarten Balliauw') ->setTitle('Office 2007 XLSX Test Document') ->setSubject('Office 2007 XLSX Test Document') ->setDescription('Test document for Office 2007 XLSX, generated using PHP classes.') ->setKeywords('office 2007 openxml php') ->setCategory('Test result file'); $spreadsheet->setActiveSheetIndex(0) ->setCellValue('A1', 'Customer Code') ->setCellValue('B1', 'Customer Name') ->setCellValue('C1', 'Customer Address'); //Connect To Database MySQL $servername = "localhost"; $username = "root"; $password = ""; $dbname = "demo"; // Create connection $conn = mysqli_connect($servername, $username, $password, $dbname); // Check connection if (!$conn) { die("Connection failed: " . mysqli_connect_error()); } mysqli_set_charset($conn,"utf8"); $sql = "SELECT * FROM customer"; $result1 = mysqli_query($conn, $sql); $rows = mysqli_num_rows($result1); if ($rows > 0) { $i = 2; while ($r = mysqli_fetch_assoc($result1)) { $spreadsheet->setActiveSheetIndex(0) ->setCellValue("A$i", $r['customer_code']) ->setCellValue("B$i", $r['customer_name']) ->setCellValue("C$i", $r['customer_address']); $i++; } } // Rename worksheet $spreadsheet->getActiveSheet()->setTitle('Simple'); // Set active sheet index to the first sheet, so Excel opens this as the first sheet $spreadsheet->setActiveSheetIndex(0); // Redirect output to a client’s web browser (Xlsx) header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); header('Content-Disposition: attachment;filename="01simple.xlsx"'); header('Cache-Control: max-age=0'); // If you're serving to IE 9, then the following may be needed header('Cache-Control: max-age=1'); // If you're serving to IE over SSL, then the following may be needed header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); // always modified header('Cache-Control: cache, must-revalidate'); // HTTP/1.1 header('Pragma: public'); // HTTP/1.0 $writer = IOFactory::createWriter($spreadsheet, 'Xlsx'); $writer->save('php://output'); exit;
ผลการทำงาน จะได้ไฟล์ excel ที่มีข้อมูลจาก ฐานข้อมูล MySQL ดังนี้
ขอขอบคุณข้อมูลจาก
https://phpspreadsheet.readthedocs.io/en/latest/