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');
ทั้งหมดก็เป็นเพียงแนวทางในการใช้งาน สำหรับผู้ที่กำลังเรียนรู้ รับทำเว็บไซต์ หวังว่าคงได้ประโยชน์กับบทความนี้พอสมควรนะครับ