2 ธันวาคม 2554

สร้างรายงาน Excel ด้วย PHPExcel แบบเลือกฟิวล์ จากฐานข้อมูลได้โดย User ผู้ใช้งาน

บทความนี้ จะยังคงเป็นบทความเกี่ยวกับ PHPExcel ซึ่งตัวผมได้รับแจ้งจากผู้ใช้งานว่า อยากได้รายงานแบบที่สามารถเลือกได้ เป็นรายงานที่ผู้ใช้งานสามารถติ๊กเลือกเอาเลย ผมก็เลยนำตัว PHPExcel มาประยุกต์ เพื่อให้เข้ากับงาน ก่อนอื่นสร้างหน้าฟอร์มสำหรับให้ User ติ๊กเลือกว่าอยากได้ข้อมูลอะไร ดังนี้



<form id="form1" name="form1" method="post" action="test_excel.php">
<input type="checkbox" name="test[]" id="test_1" value="id|ID" />ID<br />
<input type="checkbox" name="test[]" id="test_2" value="name|NAME" />NAME<br />
<input type="checkbox" name="test[]" id="test_3" value="phone|PHONE" />PHONE<br />
<input type="checkbox" name="test[]" id="test_4" value="email|EMAIL" />EMAIL<br />
<input type="checkbox" name="test[]" id="test_5" value="address|ADDRESS" />ADDRESS<br />
<input type="submit" name="button" id="button" value="Submit" />
</form>

ตรง value จะเป็นค่าที่ส่งไป เช่น id|ID ตัวแรก คือ ฟิวล์ที่ต้องการ ตัวที่สองหลังเครื่องหมาย | คือค่าที่เราจะนำไปแสดงบนคอลัมภ์ของ EXCEL ครับ
ก็จะปรากฏออกมาประมาณ นี้


ID

NAME

PHONE

EMAIL

ADDRESS



หลังจากนั้นก็สร้างไฟล์รับคือ test_excel.php ไว้สำหรับสร้างไฟล์ EXCEL ครับ ดังนี้

<?php

// Require Class PHPExcel
require_once 'Classes/PHPExcel.php';

// Create new PHPExcel object
$objPHPExcel = new PHPExcel();

// Set properties
$objPHPExcel->getProperties()->setCreator("test");

//+ FONT NAME
$objPHPExcel->getDefaultStyle()->getFont()->setName('Arial');

//+ FONT SIZE
$objPHPExcel->getDefaultStyle()->getFont()->setSize(11);

// Set column widths
$objPHPExcel->setActiveSheetIndex(0);

// SET BORDER AND POSITION CENTER
$border = array(
'alignment' => array(
'horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_CENTER,
'vertical' => PHPExcel_Style_Alignment::VERTICAL_CENTER,
),
'borders' => array(
'top' => array(
'style' => PHPExcel_Style_Border::BORDER_THIN,
),
'bottom' => array(
'style' => PHPExcel_Style_Border::BORDER_THIN,
),
'left' => array(
'style' => PHPExcel_Style_Border::BORDER_THIN,
),
'right' => array(
'style' => PHPExcel_Style_Border::BORDER_THIN,
),
),
);

//+ ตรงนี้จะเป็นการสร้างค่า คอลัมภ์ ไ้ว้อ้างอิงสำหรับ Excel ซึ่งไฟล์ Excel จะมีคอลัมภ์ จาก A ถึง Z ซึ่ง หากเลย Z ก็จะเป็น AA, AB, AC ไปเรื่อย ๆ

$char = range('A','Z');
$colum_excel = array();
for($colum=0;$colum<2;$colum++){
foreach($char as $s){
array_push($colum_excel,$char[$colum-1].$s);
}
}


$num_field = count( $_POST['test'] ); // นับค่าฟิวล์ที่เลือกเข้ามาจากหน้าแรก

for( $i=0;$i < $num_field;$i++ ){

$field = explode( '|', $_POST['test'][$i] ); // ติดค่าที่ได้ เช่นค่า id|ID
$field_all .= ','.$field[0]; // เก็บค่าแรกก่อนเครื่องหมาย | เพื่อใช้เป็นฟิวล์ที่เลือกจากฐานข้อมูล

// สร้าง คอลัมภ์ สำหรับ EXCEL โดยเริ่มจากแถวที่ 2
$objPHPExcel->getActiveSheet()->getColumnDimension(''.$colum_excel[$i].'')->setWidth(13);
$objPHPExcel->getActiveSheet()->setCellValue(''.$colum_excel[$i].'2', $field[1]);
$objPHPExcel->getActiveSheet()->getStyle(''.$colum_excel[$i].'2')->applyFromArray($border);
}

/*ตรงนี้เราก็นำค่าตัวแปร $field_all เพื่อนำไปเลือกข้อมูลจากฐานข้อมูล เพื่อนำมาแสดงได้เลย*/

// Rename sheet
$objPHPExcel->getActiveSheet()->setTitle('test');

// Set active sheet index to the first sheet, so Excel opens this as the first sheet
$objPHPExcel->setActiveSheetIndex(0);

//+ create file
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save('test.xls');
?>

ภาพตัวอย่างของการรันไฟล์

สมมติเลือก ID, NAME, PHONE



ไฟล์ Excel หลังจากกด Submit



สมมติเลือกทั้งหมด



ไฟล์ Excel หลังจากกด Submit



ครับเท่านี้ก็น่าจะเป็นตัวอย่าง เล็ก ๆ สำหรับการสร้างรายงานด้วย PHPExcel ที่สามารถเลือกฟิวล์ได้โดย User ผู้ใช้งานครับ

ดาวน์โหลด PHPExcel ได้ที่ http://phpexcel.codeplex.com/releases/view/45412

ไม่มีความคิดเห็น:

แสดงความคิดเห็น