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

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

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

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


จากเนื้อหาตอนที่แล้ว เราได้รู้วิธีการอ่านข้อมูลจากไฟล์ 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



สร้างปุ่มกด ออกรายงาน 

<?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 ได้แล้ว
สามารถนับไปประยุกต์เพิ่มเติมได้ตามต้องการ


 


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


การใส่ header footer ที่ใส่ในทุกๆหน้า ก็จะใช้คำสั่งประมาณนี้
 
$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 สำหรับอ้างอิง





คำแนะนำ และการใช้งาน

สมาชิก กรุณา ล็อกอินเข้าระบบ เพื่อตั้งคำถามใหม่ หรือ ตอบคำถาม สมาชิกใหม่ สมัครสมาชิกได้ที่ สมัครสมาชิก


  • ถาม-ตอบ กรุณา ล็อกอินเข้าระบบ
  • เปลี่ยน


    ( หรือ เข้าใช้งานผ่าน Social Login )







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