phpexcel สร้างไฟล์ excel ได้สะดวกมาก แต่ไม่ใช่ทุกระบบจะสามารถ import ข้อมูลจากไฟล์แบบเอ็กเซลได้ การส่งออกไฟล์แบบตัวอักษรล้วน ๆ และใช้เครื่องหมายคั่นแบบไฟล์ csv จึงยังจำเป็นอยู่
ที่สำคัญคือสามารถแก้หรือเพิ่มเงื่อนไขจาก code ส่งออกข้อมูลเป็น excel โดย phpexcel ที่มีอยู่เดิม โดยดัดแปลงเล็กน้อยในส่วน header และการ write data
PHPExcel_writer_csv.php
<?php /* PHPExcel_IOFactory - Reader */
include 'PHPOffice/PHPExcel/Classes/PHPExcel.php'; $objPHPExcel = new PHPExcel () ; /* Set default style */
$defaultStyle = $objPHPExcel->getDefaultStyle () ; $defaultStyle->getFont () ->setName ('Arial') ->setSize (11) ; $defaultStyle->getNumberFormat () ->setFormatCode ('yyyy-mm-dd') ; /* Set document properties */
$title = 'Exports_Datas_' . date ('Y-m-d_H:i') ;
$objPHPExcel->getProperties () ->setCreator ('Pitt Phunsanit') ->setCategory ('Exports Datas') ->setDescription ($title) ->setKeywords ('Exports Datas ' . date ('Y-m-d')) ->setSubject ($title) ->setTitle ($title) ; /* rename sheet */
$objWorkSheet = $objPHPExcel->getActiveSheet () ;
$objWorkSheet->setTitle ('Exports Datas') ; for ($rowNo = 1; $rowNo < 10; $rowNo++) { for ($colNo = 0; $colNo < 5; $colNo++) { $insert = rand (0, 1) ; if ($insert == 1) { $colString = PHPExcel_Cell::stringFromColumnIndex ($colNo) ; $coordinate = $colString . $rowNo; $objWorkSheet->setCellValue ($coordinate, 'ส่งออกข้อมูล -> '.$coordinate) ; } }
} header ('Cache-Control: max-age=0') ;
header ('Content-Encoding: UTF-8') ;
header ('Content-Description: File Transfer') ;
header ('Content-Type: application/octet-stream') ;
header ('Content-type: text/csv; charset=UTF-8') ;
header ('Content-Disposition: attachment;filename="'.$title.'.csv"') ;
echo "\xEF\xBB\xBF"; /* UTF-8 BOM */ $objWriter = PHPExcel_IOFactory::createWriter ($objPHPExcel, 'CSV') ; /* set Delimiter, (defaults ,) */
//$objWriter->setDelimiter ('|') ;
//$objWriter->setEnclosure ('') ;
/* Set line ending (defaults PHP_EOL) */
//$objWriter->setLineEnding ('0x0d0a') ; $objWriter->save ('php://output') ;
ถ้าสังเกตจะมี $insert = rand (0, 1) ; และ if ($insert == 1) { ทำให้บาง cell ไม่มีข้อมูล เพื่อที่จะแสดงให้เห็นว่าการใช้ phpexcel จะดีกว่าการใช้ echo ส่งออกข้อมูลแบบที่ง่ายที่สุด (CSV) ในกรณีที่บางคอลัมข้อมูลไม่มี เราไม่จำเป็นต้อง echo ค่าว่าง หรือมานับ , ว่าครบมั๋ย phpexcel จะจัดการให้เอง
ถ้าเปลี่ยนรูปแบบอื่น เช่น
- ต้องการใช้เครื่องหมายอื่น เช่น pipe | ก็สามารถกำหนดโดยใช่ setDelimiter
- ต้องการ wrap ข้อมูลก็ใช้ setEnclosure จะปิดหัว ปิดท้ายข้อมูลแต่ละ cell ให้
- ต้องการใช้เครื่องมายอื่นในการแบ่งข้อมูลออกเป็นชุด ๆ ก็ setLineEnding
เขียนครั้งเดียวส่งออกข้อมูลได้ 2 รูปแบบ ส่วนคำสั่งที่ไม่ได้ใช้ในรูปแบบ csv เช่น setTitle ก็ไม่ทำให้มี error ดีจริง ๆ phpexcel