PHP Export Excel อ่านและเขียนไฟล์โดยใช้ PhpSpreadsheet
การพัฒนาเว็บไซต์ จำเป็นต้องมีระบบการอ่านและเขียนรายงานหรือไฟล์ข้อมูลต่าง ๆ ที่เป็นเอกสารเพื่อนำออกมาใช้ ก็จะมีหลากหลายวิธีการทำ แต่เราจะมาแนะนำการใช้งาน PHP Export Excel โดยใช้ PhpSpreadsheet ในการเขียนโปรแกรม ซึ่งเรามองว่าใช้งานง่ายและค่อนข้างจะครอบคลุม สามารถต่อยอดได้เป็นอย่างดี
PHPSpreadsheet คืออะไร
PHPSpreadsheet เป็นไลบรารีที่เขียนด้วย PHP ซึ่งช่วยในการอ่านและเขียนในรูปแบบไฟล์สเปรดชีตประเภทต่างๆ ด้วยความช่วยเหลือของชุดคลาสที่กำหนด รูปแบบต่างๆ ที่รองรับสเปรดชีต ได้แก่ Excel(.xlsx), Open Document Format(.ods), SpreadsheetML(.xml), CSV และอื่นๆ อีกมากมาย
การติดตั้ง PHPSpreadsheet
ใช้ Composer เพื่อทำการติดตั้ง PhpSpreadsheet ลงในโปรเจคของคุณ
composer require phpoffice/phpspreadsheet
การใช้งานอย่างง่าย
ตัวอย่างดังต่อไปนี้จะเป็นการใช้งานอย่างง่าย หากคุณต้องการเพิ่มเติมนอกเหนือจากนี้ก็สารมารถดูเอกสารเรียนรู้การใช้งาน PhpSpreadsheet ได้ที่ PhpSpreadsheet Documentation
// โหลดไลบรารีอัตโนมัติ
require 'vendor/autoload.php';
// เรียกใช้งาน
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
// สร้างเอกสาร
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$sheet->setCellValue('A1', 'Hello World !');
$writer = new Xlsx($spreadsheet);
$writer->save('hello world.xlsx');
ทีนี้มาดูตัวอย่างที่ผมเคยใช้ในการส่งออกเอกสารรายงานกันเลย
// โหลด phpspreadsheet
require 'vendor/autoload.php';
// เรียกใช้งาน
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
$spreadsheet = new Spreadsheet();
// สร้างเอกสาร
$worksheet = $spreadsheet->getSheet(0);
$worksheet->setTitle("รายชื่อลูกค้า");
// ค่าเริ่มต้นความกว้างคอลัมน์
$worksheet->getDefaultColumnDimension()->setWidth(12);
// ตั้งค่าความกว้างคอลัมน์
$worksheet->getColumnDimension('A')->setWidth(50);
$worksheet->getColumnDimension('B')->setWidth(30);
$worksheet->getColumnDimension('C')->setWidth(30);
$worksheet->getColumnDimension('D')->setWidth(40);
$worksheet->getColumnDimension('E')->setWidth(20);
// ส่วนหัวตาราง
$worksheet->setCellValue('A1', 'ลำดับ');
$worksheet->setCellValue('B1', 'ชื่อ - สกุล');
$worksheet->setCellValue('C1', 'เบอร์โทร');
$worksheet->setCellValue('D1', 'อีเมล');
$worksheet->setCellValue('E1', 'ยอดซื้อ');
// ส่วนของเนื้อหาที่ดึงข้อมมูลมาเป็น object
$count = 0;
foreach ($data_customer as $key => $item) {
$count ++;
$row = $count + 1 ;
$worksheet->setCellValue('A' . $row, $count);
$worksheet->setCellValue('B' . $row, $item->name);
$worksheet->setCellValue('C' . $row, $item->tel);
$worksheet->setCellValue('D' . $row, $item->email);
$worksheet->setCellValue('E' . $row, $item->purchase);
$worksheet->getStyle('E' . $row)->getNumberFormat()->setFormatCode('#,##0.00');
}
// ตั้งค่าตัวหนา
$worksheet->getStyle('A1:E1')->getFont()->setBold(true);
// ตั้งค่าจัดแนว
$worksheet->getStyle('A:D')->getAlignment()->setHorizontal('left');
$worksheet->getStyle('E')->getAlignment()->setHorizontal('right');
// ตั้งค่าตัดข้อความ
// $worksheet->getStyle('A:D')->getAlignment()->setWrapText(true);
$writer = new Xlsx($spreadsheet);
// ตัวอย่างในฟังชั่นนี้จะไม่ได้บันทึกจะใช้ส่งออกทางบราวเซอร์ดาวน์โหลดแทน
// $writer->save('test.xlsx');
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="รายชื่อลูกค้า.xls"');
header('Cache-Control: max-age=0');
$writer->save('php://output');
ต่อไปหากว่าต้องการใช้อัพเดทข้อมูลในเอกสาร Excel ก็จะมีตัวอย่างประมาณนี้
// โหลด phpspreadsheet
require 'vendor/autoload.php';
// เรียกใช้งาน
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
// อ่านเอกสาร
$spreadsheet = $reader->load('ลิงค์เอกสาร.xlsx');
// ตัวอย่างแก้ไขวันที่ในเอกสาร
$worksheet = $spreadsheet->getSheet(0);
$worksheet->getCell('D2')->setValue('1/' . (date('Y') + 543));
$worksheet->getCell('F2')->setValue(date('Y-m-d'));
$worksheet->getCell('G2')->setValue(date('Y-m-d'));
$writer = new \PhpOffice\PhpSpreadsheet\Writer\Xlsx($spreadsheet);
writer->save('ลิงค์เอกสาร.xlsx');
ทั้งหมดก็เป็นเพียงแนวทางในการใช้งาน สำหรับผู้ที่กำลังเรียนรู้ รับทำเว็บไซต์ หวังว่าคงได้ประโยชน์กับบทความนี้พอสมควรนะครับ