การใส่ข้อมูลลงในไฟล์ word (.docx) ด้วย PHP กันเถอะ

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

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

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

รูปแบบระบบส่งข่าวของช่องเก้า (MCOT/อสมท.) มีความไม่เหมือนใครตรงที่ ทางสถานีจะให้ส่งเป็นไฟล์บทข่าวเป็นไฟล์ word (.docx) เพื่อเข้านำเข้าสู่ระบบและนำไฟล์วีดีโอส่งเป็น FTP เข้าสถานี โดยส่วนตัวชอบ FTP นะครับเพราะว่ามันส่งไฟล์ใหญ่ๆได้ดี แต่ก็มีเหมือนกันในบางสำนักข่าวจะให้ upload ทั้งบทข่าวและไฟล์วีดีโอทางเว็บบาร์วเซอร์ ซึ่งทั้งสองระบบมีข้อดีข้อเสียต่างกันออกไป

จริงๆที่ผ่านมาก็จะใช้ Teamviewer ไป remote กลับไปที่เครื่องที่บ้านเพื่อตัดต่อและพิมพ์ไฟล์เอกสาร เอาจริงๆแค่ตัดตัดเครื่องก็จะระเบิดแล้ว แถมเวลาเปลี่ยน layout keyboard สลับไปมาระหว่างไทยอังกฤษนี่บอกเลยถึงตายอ่ะครับ

ดังนั้นผมก็เลยหาวิธีว่า เออ เราจะทำยังไงได้บ้างที่จะสามารถลดเวลาในการทำงานโดยอาจพิมพ์ใส่แล้วเซฟลงฐานข้อมูลแล้วจึง export ออกมาเป็นไฟล์ word พร้อมใช้งานได้บ้าง? คือหลักๆที่เราใช้คือเพื่อใส่ข้อความลงในช่องแค่นั้นเอง

ไปอ่านครั้งแรกก็เจอใน Stackoverflow ว่าไฟล์ docx เนี่ยมันเป็น xml contrainer นะเราสามารถเปลี่ยนเป็น zip แล้วแตกไฟล์ออกมาแล้วแก้ไฟล์ชื่อ content.xml ได้เลย

เดียวก่อน! ถ้าใครจะทำตามข้างบนนั้นผม บอกเลยว่า มันไม่ด้ายยยยยยย

ซึ่งก็ลองอยู่หลายทีจนหมดกำลังใจ 555 สงสัยกลับไปเขียน word เหมือนเดิมก็ได้ จนมาเจอ library ตัวนึงชื่อ PHPWord ซึ่งทำให้ PHP สามารถสร้างไฟล์ word ได้ด้วย

ซึ่งวิธีการลงคงไม่ต้องอธิบายอะไร (ใช้ composer หรือไม่ก็ลากๆวางๆเอา) หลักแล้วการทำงานไม่ยากเลยคือ

1.ให้สร้างไฟล์ word ที่มีข้อความพร้อมแทนที่วางไฟล์โดยตั้ง ${value1} โดยใช้ value1 เป็นชื่อตัวแปร


ในรูปตั้งผิดนะต้องเป็น ${value1} อะไรงี้ไม่ใช่แค่ {value1} เฉยๆ

2.ให้ PHPWord โหลดไฟล์ข้อ 1.

$templateProcessor = new \PhpOffice\PhpWord\TemplateProcessor("ch9.docx");

3.สั่งให้ PHPWord แทนที่ข้อความ

$templateProcessor = new \PhpOffice\PhpWord\TemplateProcessor("ch9.docx");
	$templateProcessor->setValue('value1', $v1); //news title
	//...
	$templateProcessor->setValue('value8', $v8); //NEWS CONTENT

4.สั่งให้เซฟ

$templateProcessor = new \PhpOffice\PhpWord\TemplateProcessor("ch9.docx");
	$templateProcessor->setValue('value1', $v1); //news title
	$templateProcessor->setValue('value2', $v2); //DATE OF NEWS 01 ม.ค. 61
	$templateProcessor->setValue('value3', $v3); //NEWS CITY
	$templateProcessor->setValue('value4', $v4); //NEWS PLACE
	$templateProcessor->setValue('value5', $v5); //REPORTER NAME
	$templateProcessor->setValue('value6', $v6); //NEWS NOTE
	$templateProcessor->setValue('value7', $v7); //NEWS HEADLINE
	$templateProcessor->setValue('value8', $v8); //NEWS CONTENT
 
	$templateProcessor->saveAs("news_fn.docx");

แค่นี้ก็สามารถแทนที่ได้แล้ว!แล้วครับ โดยส่วนตัวคิดว่าหลังจากนี้น่าจะทำงานง่ายขึ้นเยอะเลยล่ะ

2 ความคิดเห็นเกี่ยวกับ “การใส่ข้อมูลลงในไฟล์ word (.docx) ด้วย PHP กันเถอะ”

  1. ตอนนี้ทำProject จบ กำลังคิดอยู่เลยค่ะ ว่าจะทำแนวที่ว่า กรอกข้อมูลในแบบฟอร์ม แล้วสามารถสั่งพิมพ์ออกมาได้เลย โดยจะเอาword กับ pdf เข้ามาอยู่ในระบบฐานข้อมูลที่เขียนด้วย php

ใส่ความเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *