จากเนื้อหาตอนที่แล้ว เราได้รู้วิธีการอ่านข้อมูลจากไฟล์ 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 |
สร้างปุ่มกด ออกรายงาน
1 2 3 4 5 6 7 | <?php echo form_open( 'simpleexport' , ' name="form_export" ' ); ?> <input type= "submit" name= "btn_export" id= "btn_export" value= "ออกรายงาน" > <?php echo "</form>" ; ?> |
เมื่อคลิกปุ่มออกรายงาน ทำงานคำสั่งดังต่อไปนี้
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 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 | <?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(); // หากต้องการบันทึกเป็นไฟล์ไว้ใน server ใช้คำสั่งนี้ $this->excel->save("/path/".$filename); // แล้วตัด header ดัานบนทั้ง 3 อันออก exit ; } } ?> |
ตัวอย่างรูปไฟล์ข้อมูลผลลัพธ์ที่ได้

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