ปกติแล้วหลายๆ คนคงเคยใช้ phpMyAdmin export เป็นไฟล์ Excel กันแล้ว แต่จริงๆ แล้วไฟล์ Excel .csv ที่ phpMyAdmin ได้ทำขึ้นนั้นเป็นแค่ Text file ที่ใช้ตัว comma เป็นตัวแยก Cell ครับ ไม่ได้เป็นไฟล์ Excel จริงๆ ถ้าหากว่าเราต้องการนำไฟล์ไปใช้ Excel จะให้เรา Save As ตลอดเลย แต่วิธีที่ผมจะแนะนำต่อไปนี้เป็นการสร้างไฟล์ที่เป็น Excel จริงๆ ที่มีนามสกุลเป็น .xls ลองมาดูตัวอย่าง code php กันครับ
ตัวอย่างการสร้างไฟล์ XLS ด้วยภาษา PHP
1. ขั้นแรกสร้าง Function ในการ สร้างไฟล์ XLS
function xlsBOF() {
echo pack("ssssss", 0x809, 0x8, 0x0, 0x10, 0x0, 0x0);
return;
}
function xlsEOF() {
echo pack("ss", 0x0A, 0x00);
return;
}
function xlsWriteNumber($Row, $Col, $Value) {
echo pack("sssss", 0x203, 14, $Row, $Col, 0x0);
echo pack("d", $Value);
return;
}
function xlsWriteLabel($Row, $Col, $Value ) {
$L = strlen($Value);
echo pack("ssssss", 0x204, 8 + $L, $Row, $Col, 0x0, $L);
echo $Value;
return;
} ?> |
2. ส่ง Header ให้ Browser รู้จักว่าเป็นไฟล์ XLS
// ตรงนี้คือ sql statement ในการดึงข้อมูลมาจากฐานข้อมูล
$result=mysql_db_query($dbname,"select id,prename,name,sname,grade from appdata where course='$courseid' and sec='$section'")
// เมื่อได้ข้อมูลแล้วเราก็ส่ง Header เลยครับ
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");;
header("Content-Disposition: attachment;filename=$courseid-$sec.xls "); // แล้วนี่ก็ชื่อไฟล์
header("Content-Transfer-Encoding: binary ");
// ต่อมาก็ลองดูเอาเองนะครับผมคงไม่อธิบายหมด ต้องใช้ sense หน่อย อิ อิ
xlsBOF();
xlsWriteLabel(1,0,"รายชื่อนักศึกษาที่ลงทะเบียนเรียน $semester/$year");
xlsWriteLabel(2,0,"COURSENO : ");
xlsWriteLabel(2,1,"$courseid");
xlsWriteLabel(3,0,"TITLE : ");
xlsWriteLabel(3,1,"$title");
xlsWriteLabel(4,0,"SETION : ");
xlsWriteLabel(4,1,"$sec");
xlsWriteLabel(6,0,"ที่");
xlsWriteLabel(6,1,"รหัสนักศึกษา");
xlsWriteLabel(6,2,"นาม");
xlsWriteLabel(6,3,"ชื่อ");
xlsWriteLabel(6,4,"นามสกุล");
$xlsRow = 7;
while(list($id,$prename,$name,$sname,$grade)=mysql_fetch_row($result)) {
++$i;
xlsWriteNumber($xlsRow,0,"$i");
xlsWriteNumber($xlsRow,1,"$id");
xlsWriteLabel($xlsRow,2,"$prename");
xlsWriteLabel($xlsRow,3,"$name");
xlsWriteLabel($xlsRow,4,"$sname");
$xlsRow++;
}
xlsEOF();
exit();?> |
วิธีการสร้างไฟล์ Excel ด้วย PHP อย่างยาก
Posted on Friday, October 06 @ 18:06:19 ICT by apples |
|
หลักจากที่ผมได้พูดถึงการ Export ข้อมูลออกมาเป็นไฟล์ Excel อย่างง่ายไปแล้วนะครับ
มีหลายๆ คนก็ส่งอีเมล์มาอยากให้เขียนบทความเกี่ยวกับการ Export Excel อย่างยากให้ไวๆหน่อย
แต่พอดีช่วงก่อนผมงานเยอะเลยไม่ค่อยมีเวลาต้องขออภัยมา ณ ที่นี้ด้วย เอาเป็นว่าเรามาเริ่มกันดีกว่า
ว่าอย่างยากที่ว่านี่เป็นยังไง แต่ก่อนอื่นเราต้องเตรียมเครื่องมือให้พร้อมก่อน
เครื่องมือสำหรับการสร้างไฟล์ Excel
1. PHP WriteExcel Class สำหรับสร้างไฟล์ Excel ดาวน์โหลดได้จาก
http://www.bettina-attack.de/jonny/view.php/projects/php_writeexcel
วิธีการเขียนให้ PHP สามารถ Export ออกมาเป็น Excel
1. เมื่อดาวน์โหลดไฟล์ PHP WriteExcel Class มาแล้วก็ทำการแตกลง Directory ไหนก็ได้นะครับยกตัวอย่างเช่น /home/phpexcel
2. ใน Directory /home/phpexcel ให้เอาแต่ไฟล์ที่มีชื่อขึ้นต้นด้วย class.* มานอกนั้นลบไปได้เลยครับ
3. ในไฟล์ class.writeexcel_worksheet.inc.php ให้ไปหาคำว่า $fh=fopen($this->_tmpfilename, "w+b"); พอเจอแล้ว Comment
ด้วย # ด้านหน้าสุดของบรรทัดเลยครับ
4. ในไฟล์ class.writeexcel_worksheet.inc.php ให้หาคำว่า $this->_print_gridlines = 1;
ให้แก้เป็น $this->_print_gridlines = 0;
5. วิธีการเขียนโปรแกรมให้ Export ออกมาเป็น Excel
ยังมีต่อครับคลิกอ่านต่อได้เลยครับ
require_once "/home/phpexcel/class.writeexcel_workbook.inc.php";
require_once "/home/phpexcel/class.writeexcel_worksheet.inc.php";
$token = md5(uniqid(rand(), true));
$fname= "../tmp/$token.xls";
$workbook =& new writeexcel_workbook($fname);
$worksheet =& $workbook->addworksheet("ข้อมูลนักศึกษาที่ลงทะเบียน");
$worksheet->set_margin_right(0.50);
$worksheet->set_margin_bottom(1.10);
## Set Format ##
$xlscelldesc_header =& $workbook->addformat();
$xlscelldesc_header->set_font('Angsana New');
$xlscelldesc_header->set_size(18);
$xlscelldesc_header->set_color('black');
$xlscelldesc_header->set_bold(1);
$xlscelldesc_header->set_text_v_align(1);
$xlscelldesc_header->set_merge(1);
$xlsCellDesc =& $workbook->addformat();
$xlsCellDesc->set_font('Angsana New');
$xlsCellDesc->set_size(14);
$xlsCellDesc->set_color('black');
$xlsCellDesc->set_bold(1);
$xlsCellDesc->set_align('left');
$xlsCellDesc->set_text_v_align(1);
## End of Set Format ##
## Set Column Width & Height กำหนดความกว้างของ Cell
$worksheet->set_column('A:B', 2);
$worksheet->set_column('B:C', 4);
$worksheet->set_column('C:D', 11.29);
$worksheet->set_column('D:E', 21);
$worksheet->set_column('E:F', 15);
$worksheet->set_column('F:G', 32);
$celldesc_h = 16.50;
## Writing Data เพิ่มข้อมูลลงใน Cellง
$worksheet->write_blank(A1,$xlscelldesc_header);
$worksheet->write(B1,"ข้อมูลนักศึกษาที่ลงทะเบียน ภาคเรียนที่ $semester ปีการศึกษา $year", $xlscelldesc_header);
$worksheet->write_blank(C1,$xlscelldesc_header);
$worksheet->write_blank(D1,$xlscelldesc_header);
$worksheet->write_blank(E1,$xlscelldesc_header);
$worksheet->write_blank(F1,$xlscelldesc_header);
# กำหนดความสูงของ Cell
$worksheet->set_row(1, $celldesc_h);
$worksheet->set_row(2, $celldesc_h);
$worksheet->set_row(3, $celldesc_h);
$worksheet->set_row(4, $celldesc_h);
$worksheet->set_row(5, $celldesc_h);
$worksheet->write(B4, " รหัสวิชา :", $xlscelldesc_header);
$worksheet->write(D4, " $courseno ", $xlscelldesc_header);
$worksheet->write(B6,"ที่", $xlscelldesc_header);
$worksheet->write(C6,"รหัสนักศึกษา", $xlscelldesc_header);
$worksheet->write(D6,"ชื่อ - นามสกุล", $xlscelldesc_header);
$worksheet->write_blank(E6,$xlscelldesc_header);
$worksheet->write(F6," ", $xlscelldesc_header);
$xlsRow = 7;
# ตรงนี้คือดึงข้อมูลจาก mysql มาใส่ใน Cell
while(list($id,$prename,$name,$sname)=mysql_fetch_row($result)) {
++$i;
$worksheet->set_row($xlsRow, 19.80);
$worksheet->write("B$xlsRow", "$i", $xlsCellDesc);
$worksheet->write("C$xlsRow", "$id", $xlsCellDesc);
$worksheet->write("D$xlsRow", "$prename$name", $xlsCellDesc);
$worksheet->write("E$xlsRow", "$sname", $xlsCellDesc);
$worksheet->write("F$xlsRow", "......................................................................", $xlsCellDesc);
$xlsRow++;
}
# เสร็จแล้วก็ส่งไฟล์ไปยัง Browser ครับแค่นี้ก็เสร็จแล้ว
$workbook->close();
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
header("Content-Disposition: attachment; filename=".basename("ชื่อไฟล์.xls").";");
header("Content-Transfer-Encoding: binary ");
header("Content-Length: ".filesize($fname));
readfile($fname);
unlink($fname);
exit(); |
6. เพียงเท่านี้ท่านก็สามารถทำ Report ที่ Print ออกมาสวยหรูแถมยังเอาไปใช้คำณวณได้ด้วย Excel
7. สำหรับใครต้องการให้แสดงเป็นรูปแบบใดก็สามารถพลิกแพลงได้ตามใจชอบครับ ลองดูตัวอย่างที่ผมทำไว้ใช้งานจริงได้ที่
http://www3.reg.cmu.ac.th/regist/public/stdtotal.php?var=maxregist&COURSENO=001103&SECLEC=001&SECLAB=000&ctype=precourse ให้ลองกดตรงปุ่มดาวน์โหลดดูนะครับ จะมีการสร้าง Report หลายรูปแบบเอาไว้ ลองปริ้นออกมาดูแต่ละแบบก็ได้นะครับจะเห็นข้อแตกต่าง คราวหน้าผมจะมาพูดถึงรูปแบบอื่นๆ อีก
|
|