จากเนื้อหาตอนที่แล้ว เราได้รู้วิธีการอ่านข้อมูลจากไฟล์ Excel หรือ CSV เบื้องต้นอย่างง่าย
มาแล้ว เนื้อหาตอนนี้เราจะมาทำการดึงข้อมูลจากฐานข้อมูลเพื่อออกเป้นรายงาน หรือสร้างเป็น
ไฟล์ excel รองรับนามสกุล xls,xlsx
ปล. เนื้อหานี้ต่อจากตอนที่แล้ว
การติดตั้ง PHPExcel ให้สามารถใช้งานกับ Codeigniter
https://www.ninenik.com/content.php?arti_id=689 via @ninenik
ในที่นี้จะขอยกตัวอย่างแบบง่าย สามารถนำไปประยุกต์เพิ่มเติม เช่นสร้างเป็นฟังก์ชั่นใน models
เพื่อเรียกใช้งานก็ได้ แต่เราจะใช้แบบธรรมดา คือสมมติมีปุ่มกด เพื่อคลิก ออกรายงาน
จากนั้นก็ตรวจสอบ และทำการออกรายงานสร้างไฟล์ excel และดาวน์โหลด
ตารางข้อมูลสำหรับทดสอบ ตาราง tbl_product
สร้างปุ่มกด ออกรายงาน
เมื่อคลิกปุ่มออกรายงาน ทำงานคำสั่งดังต่อไปนี้
| pro_id | pro_name | pro_price |
| 1 | Pro 111 | 100 |
| 2 | Pro 222 | 200 |
| 3 | Pro 333 | 100 |
| 4 | Pro 444 | 250 |
| 5 | Pro 555 | 400 |
สร้างปุ่มกด ออกรายงาน
<?php
echo form_open('simpleexport',' name="form_export" ');
?>
<input type="submit" name="btn_export" id="btn_export" value="ออกรายงาน">
<?php
echo "</form>";
?>
เมื่อคลิกปุ่มออกรายงาน ทำงานคำสั่งดังต่อไปนี้
<?php
// เมื่อคลิกที่ปุ่ม btn_export เพื่อออกรายงาน
if($this->input->post("btn_export")){
// โหลด excel library
$this->load->library('excel');
// เรียนกใช้ PHPExcel
$objPHPExcel = new PHPExcel();
// เราสามารถเรียกใช้เป็น $this->excel แทนก็ได้
// กำหนดค่าต่างๆ ของเอกสาร excel
$objPHPExcel->getProperties()->setCreator("Ninenik.com")
->setLastModifiedBy("Ninenik.com")
->setTitle("PHPExcel Test Document")
->setSubject("PHPExcel Test Document")
->setDescription("Test document for PHPExcel, generated using PHP classes.")
->setKeywords("office PHPExcel php")
->setCategory("Test result file");
// กำหนดชื่อให้กับ worksheet ที่ใช้งาน
$objPHPExcel->getActiveSheet()->setTitle('Product Report');
// กำหนด worksheet ที่ต้องการให้เปิดมาแล้วแสดง ค่าจะเริ่มจาก 0 , 1 , 2 , ......
$objPHPExcel->setActiveSheetIndex(0);
// การจัดรูปแบบของ cell
$objPHPExcel->getDefaultStyle()
->getAlignment()
->setVertical(PHPExcel_Style_Alignment::VERTICAL_TOP)
->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_CENTER);
//HORIZONTAL_CENTER //VERTICAL_CENTER
// จัดความกว้างของคอลัมน์
$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(20);
$objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth(20);
$objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth(20);
$objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth(20);
// กำหนดหัวข้อให้กับแถวแรก
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue('A1', 'ลำดับ')
->setCellValue('B1', 'รหัสสินค้า')
->setCellValue('C1', 'ชื่อสินค้า')
->setCellValue('D1', 'ราคา');
// ดึงข้อมูลเริ่มเพิ่มแถวที่ 2 ของ excel
$start_row=2;
$sql = "
SELECT *
FROM tbl_product
";
$query = $this->db->query($sql);
$result = $query->result_array();
$i_num=0;
if(count($result)>0){
foreach($result as $row){
$i_num++;
// หากอยากจัดข้อมูลราคาให้ชิดขวา
$objPHPExcel->getActiveSheet()
->getStyle('C'.$start_row)
->getAlignment()
->setHorizontal(PHPExcel_Style_Alignment::HORIZONTAL_RIGHT);
// หากอยากจัดให้รหัสสินค้ามีเลย 0 ด้านหน้า และแสดง 3 หลักเช่น 001 002
$objPHPExcel->getActiveSheet()
->getStyle('B'.$start_row)
->getNumberFormat()
->setFormatCode('000');
// เพิ่มข้อมูลลงแต่ละเซลล์
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue('A'.$start_row, $i_num)
->setCellValue('B'.$start_row, $row['pro_id'])
->setCellValue('C'.$start_row, $row['pro_name'])
->setCellValue('D'.$start_row, $row['pro_price']);
// เพิ่มแถวข้อมูล
$start_row++;
}
// กำหนดรูปแบบของไฟล์ที่ต้องการเขียนว่าเป็นไฟล์ excel แบบไหน ในที่นี้เป้นนามสกุล xlsx ใช้คำว่า Excel2007
// แต่หากต้องการกำหนดเป็นไฟล์ xls ใช้กับโปรแกรม excel รุ่นเก่าๆ ได้ ให้กำหนดเป็น Excel5
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007'); // Excel2007 (xlsx) หรือ Excel5 (xls)
$filename='Product-'.date("dmYHi").'.xlsx'; // กำหนดชือ่ไฟล์ นามสกุล xls หรือ xlsx
// บังคับให้ทำการดาวน์ดหลดไฟล์
header('Content-Type: application/vnd.ms-excel'); //mime type
header('Content-Disposition: attachment;filename="'.$filename.'"'); //tell browser what's the file name
header('Cache-Control: max-age=0'); //no cache
ob_end_clean();
$objWriter->save('php://output'); // ดาวน์โหลดไฟล์รายงาน
// หากต้องการบันทึกเป็นไฟล์ไว้ใน server ใช้คำสั่งนี้ $this->excel->save("/path/".$filename);
// แล้วตัด header ดัานบนทั้ง 3 อันออก
exit;
}
}
?>
ตัวอย่างรูปไฟล์ข้อมูลผลลัพธ์ที่ได้

เท่านี้เราก็สามารถดึงข้อมูลจากฐานข้อมูลมาแสดงเป้นรายงานข้อมูล Excel ได้แล้ว
สามารถนับไปประยุกต์เพิ่มเติมได้ตามต้องการ