Tag Archive หน้า

Byphunsanit

สร้าง excel เป็นชุดแบบหลายหน้าชีท

บางครั้งก็ต้องส่งออกข้อมูลเป็นชุดจำนวนมากหลายชีท ข้อมูลหนึ่งก็ใส่ไว้ในอีกชีทหนึ่ง ก็ใช้การแก้เล็กน้อยจากตัวอย่าง สร้าง 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');

อธิบาย

  1. บรรทัดที่ 28 – 32 จะเป็นการสร้าง sheet ขึ้นมาใหม่ และอ้างถึงชีทนี้โดยใช้ $objWorkSheet ในการใส่ข้อมูลลงไป
  2. บรรทัดที่ 35 – 37 เราสามารถกลับมาแก้ไข sheet ที่สร้างไปแล้วโดยใช้คำสั่ง setActiveSheetIndex และ getActiveSheet จากนั้นอ้างถึงชีทนี้โดยใช้ $objWorkSheet
  3. สังเกตว่า setActiveSheetIndex ใช้การนับลำดับ sheet เริ่มจาก 0 ไม่ใช่ 1
  4. มีชีทชือ Worksheet เกินอยู่ มันเป็น default ของตัว PHPExcel เอง จริงๆเราควรจะใช้ คำสั่ง
$objWorkSheet = $objPHPExcel->getActiveSheet();
$objWorkSheet->setTitle('Exports Datas');

กับแผ่นนี้ แล้วใช้เหมือนกับชีทแผ่นอื่นๆ ก่อนที่จะ loop สร้าง sheet ขึ้นมาใหม่