PlusMagi's Blog By Pitt Phunsanit Backend PHPWord: รวมไฟล์ word เป็นไฟล์เดียว

PHPWord: รวมไฟล์ word เป็นไฟล์เดียว

ในโลกของการจัดทำรายงาน (Report Generation) ที่ซับซ้อน มักเกิดปัญหาที่ต้องอาศัยการนำ Template เอกสารย่อยๆ หลายส่วน (เช่น ส่วนหัว, เนื้อหาหลัก, ส่วนท้าย) มาประกอบรวมกันให้กลายเป็นเอกสารฉบับสมบูรณ์เพียงไฟล์เดียว

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

⚙️ หลักการทำงาน: การรวมเอกสารด้วย DocxMerge

DocxMerge ถูกออกแบบมาเพื่อแก้ไขปัญหาการประกอบเอกสาร (Document Composition) โดยการรับไฟล์ Template ต้นฉบับหลายไฟล์เข้ามารวมกันเป็นไฟล์ Output เดียว โดยหลักการทำงานนั้นไม่ได้ซับซ้อน เพียงแค่เราต้องระบุรายการไฟล์ต้นฉบับ (Templates) ทั้งหมด และระบุชื่อไฟล์ปลายทางที่ต้องการให้ระบบสร้างขึ้นมา

แม้ว่าการทำงานจริงจะเป็นการจัดการไฟล์ DOCX แต่ในเชิงแนวคิดของระบบฐานข้อมูล (Database System) การรวมข้อมูลหลายชุดให้เป็นชุดเดียว ก็เปรียบเสมือนการรวมไฟล์เอกสารหลายไฟล์เข้าด้วยกัน เราสามารถจำลองกระบวนการนี้ด้วยโครงสร้างคำสั่งที่ชัดเจน ดังตัวอย่างการใช้ PostgreSQL เพื่อแสดงแนวคิดการรวมรายการข้อมูล (Conceptual Merging):

SQL

-- สมมติว่าเรามีข้อมูล Template หลายส่วนที่ต้องรวมกันเป็นรายงานเดียว (Report) --

SELECT
    'header.docx' AS template_file,
    'body.docx' AS template_file,
    'footer.docx' AS template_file
UNION ALL
SELECT
    '1,2,3' AS data_list_string,
    'apple,banana,orange' AS data_list_string
ORDER BY
    template_file;

-- คำสั่งนี้แสดงถึงการรวบรวมรายการไฟล์ย่อยๆ เข้าเป็นชุดข้อมูลเดียว

ในทางปฏิบัติของ PHPWord/DocxMerge โค้ดจะดำเนินการในลักษณะที่คล้ายกัน คือการสร้าง Object ของ DocxMerge และส่งรายการไฟล์ที่ต้องการรวมเข้าไป จากนั้นระบบจะจัดการการเขียนทับและรวมเนื้อหาทั้งหมดเข้าด้วยกัน

💡 ขั้นตอนการใช้งาน DocxMerge อย่างรวดเร็ว

การใช้งานหลักๆ คือการกำหนดรายการไฟล์ต้นฉบับ (Templates Array) และเรียกใช้ฟังก์ชัน `merge()` เพื่อให้ระบบจัดการส่วนที่เหลือทั้งหมดให้เราโดยอัตโนมัติ

SQL

-- ตัวอย่างโค้ดจำลองการรวมไฟล์ในเชิงแนวคิด (Conceptual Code Block)

$dm = new DocxMerge();
$templates = ['header.docx', 'body.docx', 'footer.docx'];
$fileNameTemp = sys_get_temp_dir() . 'result.docx';

// การรวมเอกสารหลายไฟล์เป็นไฟล์เดียว
$dm->merge($templates, $fileNameTemp);

// ทำการดาวน์โหลดไฟล์ที่รวมเสร็จแล้ว
// readfile($fileNameTemp);

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

✅ บทสรุป: ประสิทธิภาพในการสร้างรายงาน

การใช้ DocxMerge ร่วมกับ PHPWord เป็นทางออกที่ยอดเยี่ยมสำหรับนักพัฒนาที่ต้องสร้างระบบรายงานที่ต้องประกอบจากหลายส่วน การทำความเข้าใจหลักการรวมไฟล์ (Merging) นี้ จะช่วยให้คุณสามารถจัดการกับเอกสารที่ซับซ้อนได้อย่างเป็นระบบ ไม่ว่าจะเป็นการรวมไฟล์ Word หรือการรวมข้อมูลจากหลายตารางใน PostgreSQL ก็ล้วนมีหลักการพื้นฐานของการรวบรวมชุดข้อมูลให้เป็นผลลัพธ์เดียว