ออกรายงาน สร้างไฟล์ Excel ด้วย PHPExcel ใน Codeigniter

เขียนเมื่อ 9 ปีก่อน โดย Ninenik Narkdee
codeigniter codeigniter 3 phpexcel

คำสั่ง การ กำหนด รูปแบบ ตัวอย่าง เทคนิค ลูกเล่น การประยุกต์ การใช้งาน เกี่ยวกับ codeigniter codeigniter 3 phpexcel

ดูแล้ว 16,776 ครั้ง


จากเนื้อหาตอนที่แล้ว เราได้รู้วิธีการอ่านข้อมูลจากไฟล์ Excel หรือ CSV เบื้องต้นอย่างง่าย
มาแล้ว เนื้อหาตอนนี้เราจะมาทำการดึงข้อมูลจากฐานข้อมูลเพื่อออกเป้นรายงาน หรือสร้างเป็น
ไฟล์ excel รองรับนามสกุล xls,xlsx 
 
ปล. เนื้อหานี้ต่อจากตอนที่แล้ว
การติดตั้ง PHPExcel ให้สามารถใช้งานกับ Codeigniter 
 
ในที่นี้จะขอยกตัวอย่างแบบง่าย สามารถนำไปประยุกต์เพิ่มเติม เช่นสร้างเป็นฟังก์ชั่นใน 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();    
        $objWriter->save('php://output'); // ดาวน์โหลดไฟล์รายงาน
        // หากต้องการบันทึกเป็นไฟล์ไว้ใน server  ใช้คำสั่งนี้ $this->excel->save("/path/".$filename);
        // แล้วตัด header ดัานบนทั้ง 3 อันออก  
        exit;
    }
     
}
?>


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


 


   เพิ่มเติมเนื้อหา ครั้งที่ 1 วันที่ 27-06-2017


การใส่ header footer ที่ใส่ในทุกๆหน้า ก็จะใช้คำสั่งประมาณนี้
 
1
2
$objPHPExcel->getActiveSheet(0)->getHeaderFooter()->setOddHeader('Header &R&F Page &P / &N');
$objPHPExcel->getActiveSheet(0)->getHeaderFooter()->setOddFooter('Footer &R&F Page &P / &N');
 
รายละเอียดเพิ่มเติมดูได้ที่ https://docs.typo3.org/typo3cms/extensions/phpexcel_library/1.7.4/manual.html#_Toc237519914


กด Like หรือ Share เป็นกำลังใจ ให้มีบทความใหม่ๆ เรื่อยๆ น่ะครับ







เนื้อหาที่เกี่ยวข้อง









URL สำหรับอ้างอิง











เว็บไซต์ของเราให้บริการเนื้อหาบทความสำหรับนักพัฒนา โดยพึ่งพารายได้เล็กน้อยจากการแสดงโฆษณา โปรดสนับสนุนเว็บไซต์ของเราด้วยการปิดการใช้งานตัวปิดกั้นโฆษณา (Disable Ads Blocker) ขอบคุณครับ