PHP Export Excel อ่านและเขียนไฟล์โดยใช้ PhpSpreadsheet

แชร์
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');

ทั้งหมดก็เป็นเพียงแนวทางในการใช้งาน สำหรับผู้ที่กำลังเรียนรู้ รับทำเว็บไซต์ หวังว่าคงได้ประโยชน์กับบทความนี้พอสมควรนะครับ

29 สิงหาคม 2566
เว็บไซต์นี้ใช้คุกกี้ที่จําเป็นในการใช้งาน โดยคุกกี้ที่ใช้ ไม่ได้มีการจัดเก็บข้อมูลที่สามารถระบุตัวตนของผู้ใช้แต่อย่างใด เรียนรู้เพิ่มเติม