เมื่อต้องเขียนโปรแกรมเพื่อสร้างเอกสาร Word (.docx) อัตโนมัติด้วยไลบรารีต่าง ๆ เช่น Open XML SDK, python-docx, Apache POI หรือไลบรารีระดับองค์กรอย่าง Aspose.Words สิ่งที่มักทำให้นักพัฒนาสะดุดบ่อยที่สุดคือ “ชื่อเรียกของสไตล์ตารางสำเร็จรูป (Built-in Table Styles)” เนื่องจากชื่อที่มองเห็นบนหน้าจอโปรแกรม Microsoft Word กับรหัสภายในที่ใช้สั่งงานในระดับโค้ดนั้นไม่ได้เหมือนกันเสียทีเดียว
บทความนี้จะพาไปเจาะลึกความสัมพันธ์ระหว่าง Display Name และ OpenXML Style ID พร้อมแนวทางการเรียกใช้งาน และแหล่งข้อมูลอ้างอิงสำหรับนำไปต่อยอด
Display Name vs Style ID: ทำไมถึงไม่เหมือนกัน?
ในสถาปัตยกรรม Office Open XML (ECMA-376) เอกสารจะแยกส่วนการแสดงผลออกจากตัวระบุข้อมูล
- UI Display Name (ชื่อที่แสดงบน Ribbon)
เป็นชื่อที่ถูกแปลตามภาษาของระบบ (Localized) เช่น ภาษาอังกฤษคือGrid Table 4 - Accent 1หรือในภาษาไทยคือตารางเส้นตาราง 4 - เน้น 1 - Built-in Style ID (รหัสโปรแกรมมิ่ง)
เป็นค่าคงที่ตามสเปกสากล ไม่มีเว้นวรรค และคำนึงถึงตัวพิมพ์เล็ก-ใหญ่ (Case-Sensitive) เช่นGridTable4-Accent1ซึ่งโปรแกรม Microsoft Word ทุกเวอร์ชันทั่วโลกจะใช้ ID นี้เหมือนกันทั้งหมด
ตารางเทียบเคียง Built-in Table Style ยอดนิยม
ตารางสรุปการจับคู่ระหว่างชื่อบนหน้าจอ (Display Name) กับ Style ID จริงที่ส่งในแท็ก <w:tblStyle w:val="..."/>:
| หมวดหมู่ | Display Name (UI / python-docx) | OpenXML Style ID (C# / Open XML SDK) | โทน Accent ที่รองรับ |
|---|---|---|---|
| Plain | Table Grid | TableGrid | ไม่มี (ขาว/ดำ) |
| Plain | Plain Table 1 – 5 | PlainTable1 ถึง PlainTable5 | ไม่มี |
| Grid (Light) | Grid Table 1 Light | GridTable1Light | Base + Accent 1–6 |
| Grid (Light) | Light Shading | LightShading-Accent1 | Accent 1–6 |
| Grid (Medium) | Grid Table 2 | GridTable2-Accent1 | Accent 1–6 |
| Grid (Medium) | Grid Table 4 | GridTable4-Accent1 | Accent 1–6 |
| Grid (Dark) | Grid Table 6 Colorful | GridTable6Colorful-Accent1 | Accent 1–6 |
| List (Light) | List Table 1 Light | ListTable1Light-Accent1 | Base + Accent 1–6 |
| List (Medium) | List Table 3 | ListTable3-Accent1 | Accent 1–6 |
| List (Dark) | List Table 7 Colorful | ListTable7Colorful-Accent1 | Accent 1–6 |
รูปแบบการเรียกใช้งานในแต่ละภาษาและไลบรารี
C# (Open XML SDK)
ใน Open XML SDK จะรับค่าเป็น StringValue จึงต้องส่ง Style ID ตัวจริงที่ไม่มีเว้นวรรค
Python
// กำหนด Style ID โดยตรง
table.AppendChild(new TableProperties(
new TableStyle() { Val = "GridTable4-Accent1" },
new TableLook() { Val = "04A0", FirstRow = true, NoHorizontalBand = false }
));