บางครั้งก็ต้องส่งออกข้อมูลเป็นชุดจำนวนมากหลายชีท ข้อมูลหนึ่งก็ใส่ไว้ในอีกชีทหนึ่ง ก็ใช้การแก้เล็กน้อยจากตัวอย่าง สร้าง excel จาก PHP
PHPExcel_writer_multiple_sheets.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | <?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 เอง จริงๆเราควรจะใช้ คำสั่ง
1 2 | $objWorkSheet = $objPHPExcel->getActiveSheet(); $objWorkSheet->setTitle('Exports Datas'); |
กับแผ่นนี้ แล้วใช้เหมือนกับชีทแผ่นอื่นๆ ก่อนที่จะ loop สร้าง sheet ขึ้นมาใหม่