PHP Ionic Angularjs Phonegap AJAX Javascript CSS MySQL jQuery Forum


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

17 February 2016 By
codeigniter phpexcel


จากเนื้อหาตอนที่แล้ว เราได้รู้วิธีการอ่านข้อมูลจากไฟล์ Excel หรือ CSV เบื้องต้นอย่างง่าย
มาแล้ว เนื้อหาตอนนี้เราจะมาทำการดึงข้อมูลจากฐานข้อมูลเพื่อออกเป้นรายงาน หรือสร้างเป็น
ไฟล์ excel รองรับนามสกุล xls,xlsx 
 
ปล. เนื้อหานี้ต่อจากตอนที่แล้ว
การติดตั้ง PHPExcel ให้สามารถใช้งานกับ Codeigniter 
http://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 ได้แล้ว
สามารถนับไปประยุกต์เพิ่มเติมได้ตามต้องการ


 








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



Tags:: codeigniter phpexcel




เนื้อหาพิเศษ เฉพาะสำหรับสมาชิก

กรุณาล็อกอิน และลงชื่อติดตาม


สมัครสมาชิกได้ที่        ล็อกอินได้ที่   



การใส่ 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 สำหรับอ้างอิง