บางครั้งก็ต้องส่งออกข้อมูลเป็นชุดจำนวนมากหลายชีท ข้อมูลหนึ่งก็ใส่ไว้ในอีกชีทหนึ่ง ก็ใช้การแก้เล็กน้อยจากตัวอย่าง สร้าง excel จาก PHP
PHPExcel_writer_multiple_sheets.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) ;
/* multiple_sheets */
for ($sheetNo = 0; $sheetNo < 10; $sheetNo++) {
$objWorkSheet = $objPHPExcel->createSheet ($sheetNo) ;
$objWorkSheet->setTitle ('Sheet Nane '.$sheetNo) ;
$objWorkSheet->setCellValue ('A1', 'Add data for sheet no. '.$sheetNo) ;
}
/* set active sheet */
$objPHPExcel->setActiveSheetIndex (5) ;
$objWorkSheet = $objPHPExcel->getActiveSheet () ;
$objWorkSheet->setCellValue ('A4', 'Add data for sheet no. 5 after Sheet Nane '.$sheetNo) ;
$objWriter =PHPExcel_IOFactory::createWriter ($objPHPExcel, 'Excel2007') ;
header ('Content-Type: application/vnd.ms-excel') ;
header ('Content-Disposition: attachment;filename="' . $title . '.xlsx"') ;
header ('Cache-Control: max-age=0') ;
header ('Cache-Control: no-store, no-cache, must-revalidate, max-age=0') ;
header ('Cache-Control: post-check=0, pre-check=0', false) ;
header ('Pragma: no-cache') ;
$objWriter->save ('php://output') ;
อธิบาย
- บรรทัดที่ 28 – 32 จะเป็นการสร้าง sheet ขึ้นมาใหม่ และอ้างถึงชีทนี้โดยใช้ $objWorkSheet ในการใส่ข้อมูลลงไป
- บรรทัดที่ 35 – 37 เราสามารถกลับมาแก้ไข sheet ที่สร้างไปแล้วโดยใช้คำสั่ง setActiveSheetIndex และ getActiveSheet จากนั้นอ้างถึงชีทนี้โดยใช้ $objWorkSheet
- สังเกตว่า setActiveSheetIndex ใช้การนับลำดับ sheet เริ่มจาก 0 ไม่ใช่ 1
- มีชีทชือ Worksheet เกินอยู่ มันเป็น default ของตัว PHPExcel เอง จริง ๆ เราควรจะใช้ คำสั่ง
$objWorkSheet = $objPHPExcel->getActiveSheet () ;
$objWorkSheet->setTitle ('Exports Datas') ;
กับแผ่นนี้ แล้วใช้เหมือนกับชีทแผ่นอื่น ๆ ก่อนที่จะ loop สร้าง sheet ขึ้นมาใหม่