ช่วงสัปดาห์ที่ผ่านมา มีโจทย์ให้สร้างเว็บเพื่อเก็บข้อมูลรายงานที่ปกติจะอยู่ในรูปแบบไฟล์ Excel ก็โอเค อยากได้ก็จัดให้ วิธีการที่ใช้ก็คือสร้าง textbox เป็นร้อยไปใส่ใน <table> กันดื้อๆ นี่แหละ ซึ่งก็เก็บข้อมูลได้ไม่มีปัญหาอะไร (แต่แอบด่าอยู่ในใจ ทำไมไม่ใช้พวก SharePoint อะไรไปเลยฟระ)
มาเดือดร้อนตอนแสดงผล เนื่องจากต้องสามารถพรินท์ออกมาเป็นรายงานได้ด้วย ซึ่งรายงานแต่ละหน้าก็ดันหน้าตาไม่เหมือนกันอีก คิดไปคิดมาถ้าจะทำเป็น template ก็ต้องทำเกือบๆ 50 ไฟล์ =.=
เลยวกกลับมาหา Excel เพราะแต่ก่อนจำได้ว่าเคยสร้างไฟล์ Excel ด้วย PHP แต่ตอนนั้นเป็นการสร้างไฟล์เปล่าๆ ขึ้นมาใหม่ แล้วใส่ข้อมูลลงไป ส่วนคราวนี้จะต่างไปเล็กน้อย เพราะต้องอ่านไฟล์ template ที่แบ่งหน้าและเซ็ต print area ไว้เรียบร้อยแล้วเข้ามาก่อน จากนั้นก็กรอกข้อมูล แล้วค่อยเซฟเป็นรายงาน
google อยู่ครึ่งวันก็ไม่พบตัวเลือกเจ๋งๆ ซักที เพราะส่วนใหญ่จะเป็นไลบรารี่สำหรับสร้างไฟล์ Excel ขึ้นมาใหม่ ไม่สามารถอ่าน/เขียนไฟล์ที่มีอยู่แล้วได้ จนกระทั่งมาเจอ PHPExcel ก็พบว่า โอ้ววว ตัวนี้แหละ ใช่เลย!
PHPExcel สามารถอ่าน/เขียนไฟล์ Excel ได้ทั้งแบบเก่าคือ Excel5 ของ MS Office 97/XP/2003 และแบบใหม่คือ OpenXML ของ MS Office 2007 โดยมีข้อแม้นิดหน่อยคือ ถ้าจะทำงานกับไฟล์ Excel 2007 ควรใช้ PHP เวอร์ชันตั้งแต่ 5.2.9 ขึ้นไป แต่ถ้าใช้กับ Excel รุ่นต่ำกว่านั้น ก็ใช้ PHP เวอร์ชัน 5.2.x ได้ทั้งหมด รายละเอียดหลักๆ ดูได้ใน Requirements และ FAQ
อย่างไรก็ตาม ตัว Reader/Writer สำหรับ Excel5 จะมีปัญหากับฟอนต์ภาษาไทยเล็กน้อย ในกรณีของผมคือฟอนต์ EucrosiaUPC แต่คิดว่ากับ Angsana หรือ Cordia ก็น่าจะเจอปัญหาเดียวกัน สำหรับวิธีแก้ไขก็ดูจากไฟล์ patch ในลิงก์ครับ
สำหรับวิธีใช้คงไม่ต้องแนะนำ เพราะ Documentation ที่อยู่ในหน้าดาวน์โหลดเขียนไว้อย่างละเอียด มีตัวอย่างเพียบ และการ support จากผู้พัฒนาก็จัดอยู่ในขั้นดีมากสำหรับโปรเจกต์โอเพ่นซอร์สแบบนี้ (เห็นพี่แกเข้ามาตอบเกือบทุกวัน)

7 comments
สวัสดีค่ะ ตอนนี้กำลังออกรายงานโดยใช้ PHPExcel แต่เจอปัญหาภาษาไทย ตอนทดลองทำกับ window เเต่พอจะใช้งานจริง ซึ่ง Hosting เป็น Linux กลับมีปัญหา ไม่ทราบว่าคุณ Suksit พอจะเเนะนำวิธีแก้ไขได้รึเปล่าคะ
ลองใช้ iconv() เเล้วก็ยังแก้ไม่ได้ ส่วน patch ที่คุณได้เเนะนำไว้ ไม่ทราบว่ามันใช้ยังไงคะ รบกวนคุณ Suksit ตอบด้วยนะคะ
ไม่แน่ใจว่าเป็นปัญหาเดียวกันหรือเปล่า ถ้าเป็นปัญหาทำนองเดียวกับของผม ต้องดูว่าในไฟล์ Excel ใช้ฟอนต์อะไรด้วยครับ สมมติว่าเป็น AngsanaUPC ถ้าเราดูในไฟล์ patch จะเห็นข้อมูลแบบนี้
Index: PHPExcel/Shared/Font.php =================================================================== --- PHPExcel/Shared/Font.php (revision 1181) +++ PHPExcel/Shared/Font.php (working copy) @@ -549,6 +549,7 @@ { switch ($name) { // Add more cases. Check FONT records in real Excel files. + case 'EucrosiaUPC': return self::CHARSET_ANSI_THAI; case 'Wingdings': return self::CHARSET_SYMBOL; case 'Wingdings 2': return self::CHARSET_SYMBOL; case 'Wingdings 3': return self::CHARSET_SYMBOL;จะเห็นว่ามันมีรายการฟอนต์อยู่ไม่กี่ตัว ถ้าฟอนต์ที่เราใช้ไม่มีอยู่ในลิสต์นี้ และเป็นภาษาไทย อาจจะทำให้อ่านไม่ออก วิธีการแก้ไขด้วยตนเองคือเปิดไฟล์
PHPExcel/Shared/Font.phpแล้วไปที่ประมาณบรรทัดที่ 549 แล้วเพิ่มข้อมูลในส่วน case เข้าไปอีกบรรทัดนึง ให้เป็นชื่อฟอนต์ของเรา เช่นประมาณนี้ครับ แต่ถ้าไม่ใช่เคสเดียวกันคงต้องติดต่อสอบถามทางผู้พัฒนาต่อไปครับ
ลองทำตามดูแล้ว ก็ยังแก้ไม่ได้ค่ะ แต่ยังไงก็ต้องขอบคุณ คุณ Suksit มากๆนะคะ
คาดว่าปัญหาอยู่ที่การ encoding ซึ่งได้อ่าน Document ของ PHPExcel เค้าบอกว่า เราจำเป็นต้องทำให้มันเป็น utf-8 โดยใช้ iconv() แต่ลองแล้วก็ยังแก้ไม่ได้เลย
ใช้ตัว iconv('TIS-620', 'UTF-8', 'สวัสดี'); แปลงเป็น UTF-8 แล้วอ่านภาษาไทยได้เลยค่ะ ^ ^ ขอบคุณค่า
ช่วยสอนวิธีการนำ excel เข้า database หน่อยครับ
ปกติจะใช้วิธีเซฟเป็น text ไฟล์แบบ Comma-separated value(.csv) ก่อนครับ แล้วค่อยอ่านข้อมูลจากฟิลด์ที่ต้องการ เพื่อ import เข้าฐานข้อมูล
ทำไม ผม ลอง อัพ ขึ้น โฮส ที่เป็น linux cent os เเล้ว มันไม่ขึ้นอะไร เลยน่ะครับ ตัวอย่าง http://61.90.204.68/v1.7.6/Tests/01simple.php
Post new comment