ออกรายงานเป็น Excel ไฟล์ ด้วย PhpSpreadsheet เบื้องต้น ตอนที่ 1

เขียนเมื่อ 4 ปีก่อน โดย Ninenik Narkdee
phpspreadsheet

คำสั่ง การ กำหนด รูปแบบ ตัวอย่าง เทคนิค ลูกเล่น การประยุกต์ การใช้งาน เกี่ยวกับ phpspreadsheet

ดูแล้ว 14,706 ครั้ง


เนื้อหานี้จะเป็นเริ่มต้นการใช้งาน PhpSpreadsheet สำหรับการออกรายงานหรือสร้าง
ไฟล์ excel  โดย PhpSpreadsheet เป็น PHP Library ที่พัฒนาใหม่มาใช้แทน PHPExcel ซึ่งปัจจุบัน
ไม่ได้มีการพัฒนาต่อแล้ว เนื้อหา PHPExcel ในเว็บไซต์ของเราก็ยังสามารถใช้งานได้ แต่แนะนำ
ให้เปลี่ยนมาใช้ตัวใหม่แทน
 

ความต้องการของโปรแกรม

    สิ่งที่จะเป็นจะต้องมีเมื่อมีจะนำ PhpSpreadsheet ไปใช้งาน มีดังนี้้
  •     เป็น PHP เวอร์ชั่น 5.6 ขึ้นไป (เฉพาะเวอร์ชั่น 1.8.2 ลงมา) มากกว่า 1.8.2 ต้องใช้ PHP 7.1 ขึ้นไป
  •     เปิดใช้งาน php_zip extension 
  •     เปิดใช้งาน php_xml extension 
  •     เปิดใช้งาน php_gd2 extension 
 
สามารถดูแนวทางการเปิดใช้งาน extension กรณีพัฒนาที่เครื่องด้วยโปรแกรมจำลอง server เช่น xampp ได้ที่บทความ
ตามลิ้งค์ http://niik.in/633 โดยดูตอนท้ายของบทความ
 
 

การติดตั้ง PhpSpreadsheet

เราจะใช้ composer เพื่อทำการติดตั้ง PhpSpreadsheet  มาใช้งานในโปรเจ็คของเรา ด้วยคำสั่ง ด้านล่างผ่าน command line
 
composer require phpoffice/phpspreadsheet // ใช้คำสั่งนี้จะได้เวอร์ชั่นล่าสุด จะต้องใช้ PHP 7.1 ขึ้นไป
composer require phpoffice/phpspreadsheet:1.8.2 // ใช้คำสั่งนี้จะได้เวอร์ชั่นที่รองรับPHP 5.6 ขึ้นไป
 

ทดสอบการทำงานเบื้องต้น

ให้เราสร้างไฟล์ชื่อ test.php แล้วกำหนดโค้ดดังนี้
 
<?php
// include composer autoload
require 'vendor/autoload.php';

// import the PhpSpreadsheet Class
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;

$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();

$sheet->setCellValue('A1', 'Hello World !'); // กำหนดค่าใน cell A1
$sheet->setCellValue('B1', 'ทดสอบข้อความภาษาไทย !'); // กำหนดค่าใน cell B1

$writer = new Xlsx($spreadsheet);
$output_file = "hello_world.xlsx"; // กำหนดชื่อไฟล์ excel ที่ต้องการ
$writer->save($output_file); // สร้าง excel 

if(file_exists($output_file)){ // ตรวจสอบว่ามีไฟล์ หรือมีการสร้างไฟล์ แล้วหรือไม่
    echo '<a href="'.$output_file.'" target="_blank">Download</a>';
}
 
รันไฟล์ test.php โดยเมื่อรันไฟล์ผ่านบราวเซอร์แล้ว หากไม่เกิดข้อผิดพลาดใดๆ ตัว PhpSpreadsheet จะทำการ
สร้างไฟล์ชื่อ hello_world.xlsx ไว้ที่ path เดียวกับไฟล์ test.php ดังรูป
 
 
ผลลัพธ์เมื่อรันผ่านบราเซอร์
 
 
ไฟล์ hello_world.xlsx
 


   เพิ่มเติมเนื้อหา ครั้งที่ 1 วันที่ 24-11-2019


การกำหนดค่า ข้อมูลเกี่ยวกับไฟล์ excel

    เราสามารถกำหนดข้อมูลรายละเอียดเกี่ยวเอกสารไฟล์ Excel เช่น ผู้เขียนไฟล์ ผู้ที่แก้ไข หัวข้อ และอื่นๆ ตาม
ต้องการตามรูปแบบด้านล่างต่อไปนี้
 
<?php
// include composer autoload
require 'vendor/autoload.php';
 
// import the PhpSpreadsheet Class
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
 
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
 
// การกำหนดค่า ข้อมูลเกี่ยวกับไฟล์ excel 
 $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");
 
$sheet->setCellValue('A1', 'Hello World !'); // กำหนดค่าใน cell A1
$sheet->setCellValue('B1', 'ทดสอบข้อความภาษาไทย !'); // กำหนดค่าใน cell B1
 
$writer = new Xlsx($spreadsheet);
$output_file = "hello_world.xlsx"; // กำหนดชื่อไฟล์ excel ที่ต้องการ
$writer->save($output_file); // สร้าง excel 
 
if(file_exists($output_file)){ // ตรวจสอบว่ามีไฟล์ หรือมีการสร้างไฟล์ แล้วหรือไม่
    echo '<a href="'.$output_file.'" target="_blank">Download</a>';
}
?>

 

การกำหนดให้ดาวน์โหลดไฟล์ Excel ทันที

    เราสามารถกำหนดให้ ทำการดาวน์โหลด Excel ไฟล์ทันทีที่มีการเรียกใช้งานการสร้างไฟล์ โดยที่ไม่ต้องทำการบันทึก
ไฟล์ไว้บน server สามารถทำได้ดังนี้
 
<?php
// include composer autoload
require 'vendor/autoload.php';
 
// import the PhpSpreadsheet Class
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
 
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
 
// การกำหนดค่า ข้อมูลเกี่ยวกับไฟล์ excel 
 $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");
 
$sheet->setCellValue('A1', 'Hello World !'); // กำหนดค่าใน cell A1
$sheet->setCellValue('B1', 'ทดสอบข้อความภาษาไทย !'); // กำหนดค่าใน cell B1
 
$writer = new Xlsx($spreadsheet);

// ชื่อไฟล์
$file_export= "Excel-".date("dmY-Hs");


header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="'.$file_export.'.xlsx"');
header("Content-Transfer-Encoding: binary ");

$writer->save('php://output');
exit(); 
?>
    กรณีใช้เป็น xls ให้ใช้เป็น xls class ดังนี้

<?php
// include composer autoload
require 'vendor/autoload.php';
  
// import the PhpSpreadsheet Class
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xls;
  
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
  
// การกำหนดค่า ข้อมูลเกี่ยวกับไฟล์ excel 
 $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");
  
$sheet->setCellValue('A1', 'Hello World !'); // กำหนดค่าใน cell A1
$sheet->setCellValue('B1', 'ทดสอบข้อความภาษาไทย !'); // กำหนดค่าใน cell B1
  
$writer = new Xls($spreadsheet);
 
// ชื่อไฟล์
$file_export= "Excel-".date("dmY-Hs");
 
 
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="'.$file_export.'.xls"');
header("Content-Transfer-Encoding: binary ");
 
$writer->save('php://output');
exit(); 
?>


กด Like หรือ Share เป็นกำลังใจ ให้มีบทความใหม่ๆ เรื่อยๆ น่ะครับ



อ่านต่อที่บทความ









เนื้อหาที่เกี่ยวข้อง









URL สำหรับอ้างอิง





คำแนะนำ และการใช้งาน

สมาชิก กรุณา ล็อกอินเข้าระบบ เพื่อตั้งคำถามใหม่ หรือ ตอบคำถาม สมาชิกใหม่ สมัครสมาชิกได้ที่ สมัครสมาชิก


  • ถาม-ตอบ กรุณา ล็อกอินเข้าระบบ
  • เปลี่ยน


    ( หรือ เข้าใช้งานผ่าน Social Login )







เว็บไซต์ของเราให้บริการเนื้อหาบทความสำหรับนักพัฒนา โดยพึ่งพารายได้เล็กน้อยจากการแสดงโฆษณา โปรดสนับสนุนเว็บไซต์ของเราด้วยการปิดการใช้งานตัวปิดกั้นโฆษณา (Disable Ads Blocker) ขอบคุณครับ