รับทําเว็บไซต์ รับทําseo
บทความที่น่าสนใจ

บทความ ที่น่าสนใจ

PHP กับการ Export Excel อย่างง่าย

    ในงานหลายๆ งานที่ต้องมีการ export ข้อมูลออกมา เมื่อก่อนงูๆ ปลาๆ แค่ทำเป็น csv ต่อมาเริ่มหาเครื่องมือช่วยแล้วก็ได้ php_writeexcel ดูตัวอย่างการทำงาน ได้ที่นี่ เป็น class ที่ช่วยสร้าง excel จริงๆ ขึ้นมาได้ ซึ่งใช้ได้ดีมากๆ แต่ในบางครั้งแค่ต้องการ export ข้อมูลอย่างเดียวเราสามารถใช้วิธีสร้างไฟล์ excel ง่ายๆ จาก code html ได้เลย

     

    ก่อนจะเริ่มดูโค้ด php มาทำความเข้าใจกันก่อนนะครับ 

    ในการเปิดหน้าเว็บจาก Browser ไม่ว่าจะเป็น IE,Firefox หรือ Browser ตัวอื่นๆ ข้อมูลที่ เจ้า Browser มันมองจะมีสองส่วนคือ ส่วนของ Header กับ Data

     

    1. Header คือ ส่วนที่ Browser จะดูว่าออกสาร หรือหน้าเว็บที่มันกำลังเปิดนั้นเป็นอะไร (โดยปกติจะเป็น text/html)

     

    2. Data คือส่วนที่เป็นข้อมูลที่เราเห็น เช่นหน้าเว็บที่เราเห็น ถ้าเป็นเว็บเพจก็ จะเป็น tag html ซึ่ง browser จะแปลงเป็นรูปแบบที่เราเห็นๆ กัน

     

    ต่อไป มาดูว่าแล้วเราจะทำไงให้ php ของเราส่ง Header ให้ Browser เข้าใจว่าเป็น xls ไฟล์ เราต้องใช้ function header() ของ php เข้ามาช่วย


    ตัวอย่าง

       header("Content-Type: application/vnd.ms-excel");

     

    ต่อไปก็จะเป็น ส่วนของ Data เมื่อเรากำหนด ส่วนของ header ให้ Browser รู้แล้วว่าเราจะส่งข้อมูลที่ ต้องเปิดกับ โปรแกรม MS excel แล้วเราก็สามารถสร้าง ข้อมูล ด้วย php โดยอาจจะดึงข้อมูลจาก ฐานข้อมูล หรือ จากการคำนวนใน php ส่งออกไป 

     

    ข้อมูลที่จะส่งออกไป ผมขอแยกเป็น 2 แบบ คือ

    1. ข้อมูลที่ เป็น text ธรรมดา

    2. ข้อมูลที่เป็น รูปแบบ เฉพาะ ของ MS excel เช่น ใน celll มีสูตร หรือ กำนหนดให้แสดงเป็นค่า เงิน หรือ กำหนด แสดงเป็นวันเดือนปี หรือ ฯลฯ ตามความสามารถของ MS excel ที่มันทำได้ (แต่จะไม่รวม มาโครนะครับ)


    แบบแรก

    1.ทำข้อมูลเป็น text  โดยมี comma (,) ขั้น เรียกว่า csv ไฟล์ 

    2. เป็นรูปแบบ tag html 

    3. ทำเป็น XML 

    อาจจะมีรูปแบบอื่นอีก  โดยข้อมูลพวกนี้ อย่างที่เรารู้กันอยู่แล้วคือ สามารถ echo หรือ print ค่าส่งให้ browser ได้เลย


    แบบที่สอง 

    ข้อมูลรูปแบบเฉพาะของ MS excel ซึ่งต้องอาศัย lib เฉพาะ


    มาดูโค้ดกันครับ

    <?php

    header("Content-Type: application/vnd.ms-excel");

    header('Content-Disposition: attachment; filename="MyXls.xls"');//ชื่อไฟล์

    ?>  

    <html xmlns:o="urn:schemas-microsoft-com:office:office"  xmlns:x="urn:schemas-microsoft-com:office:excel"  xmlns="http://www.w3.org/TR/REC-html40">  

    <HTML>  

    <HEAD>  

    <meta http-equiv="Content-type" content="text/html;charset=tis-620" />  

    </HEAD>

    <BODY>  

    <TABLE  x:str BORDER="1">  <TR>  <TD><b>AAA</b></TD>  <TD><b>AAA</b></TD>  <TD><b>AAA</b></TD>  </TR>  <TR>  <TD>BBB</TD>  <TD>BBB</TD>  <TD>BBB</TD>  </TR>  <TR>  <TD>001</TD>  <TD>002</TD>  <TD>003</TD>  </TR>  <TR>  <TD>ภาษาไทย</TD>  <TD>ภาษาไทย</TD>  <TD>ภาษาไทย</TD>  </TR>  

    </TABLE>  

    </BODY>  

    </HTML>

     

    จุดหลักๆมีอยู่ 3 จุด

    1. แป่ะ Header เพื่อบอกว่าจะเปิดไฟล์ Excel


    <?phpheader("Content-Type: application/vnd.ms-excel");header('Content-Disposition: attachment; filename="MyXls.xls"');#ชื่อไฟล์?>


    2.ส่วนนี้มีผลกับการแสดง Excel จำเป็นมาก


    <html xmlns:o="urn:schemas-microsoft-com:office:office"xmlns:x="urn:schemas-microsoft-com:office:excel"xmlns="http://www.w3.org/TR/REC-html40">


    3. อันนี้แหล่ะที่จะทำให้ข้อมูลที่นำหน้าด้วยเลขศูนย์แสดงขึ้นมา เพราะกำหนดให้เป็น String


    <TABLE  x:str BORDER="1">

     

     ตัว phpmyadmin ที่เราๆ ท่านๆ ใช้กันอยู่ก็ใช้วิธี export ออกเป็น excel ด้วยวิธีนี้เช่นกัน