ในโลกของการพัฒนาซอฟต์แวร์องค์กร การสร้างรายงานและเอกสารที่อยู่ในรูปแบบ Excel เป็นภารกิจที่เกิดขึ้นแทบจะทุกวัน อย่างไรก็ตาม เมื่อชุดข้อมูลมีขนาดใหญ่ขึ้น และมีการใช้ข้อความ (String) ซ้ำๆ กันจำนวนมาก ปัญหาด้านประสิทธิภาพและความกินหน่วยความจำก็จะตามมาอย่างหลีกเลี่ยงไม่ได้ การจัดการกับโครงสร้างข้อมูลเหล่านี้ให้เป็นระเบียบและประหยัดทรัพยากรจึงเป็นหัวใจสำคัญของการพัฒนาแอปพลิเคชันที่เสถียร
เจาะลึกรายละเอียดและประเด็นสำคัญ
เมื่อเราพูดถึงการทำงานกับไฟล์ Excel ด้วย OpenXML SDK หัวใจของการเพิ่มประสิทธิภาพคือการทำความเข้าใจกลไกเบื้องหลังของโครงสร้าง XML ของไฟล์ XLSX โดยเฉพาะอย่างยิ่งแนวคิดเรื่อง SharedStringTable (ตารางสตริงที่ใช้ร่วมกัน) แทนที่จะให้แต่ละเซลล์เก็บค่าข้อความเต็มๆ เป็นของตัวเอง ซึ่งจะทำให้เกิดการซ้ำซ้อนของข้อมูลและเพิ่มขนาดไฟล์โดยไม่จำเป็น OpenXML SDK จึงมีกลไกในการจัดการให้เราสามารถอ้างอิงถึงสตริงเหล่านั้นด้วย Index (ดัชนี) แทน
การใช้ SharedStringTable อย่างถูกต้องหมายความว่า ข้อความที่ปรากฏซ้ำๆ กันในหลายเซลล์ จะถูกจัดเก็บไว้ในตารางกลางเพียงครั้งเดียว และทุกเซลล์ที่ต้องการข้อความนั้นจะทำหน้าที่เป็นแค่ “ตัวชี้” (Pointer) ไปยัง Index นั้น การจัดการเช่นนี้ไม่เพียงแต่ช่วยลดขนาดไฟล์อย่างมหาศาล แต่ยังช่วยให้กระบวนการอ่านและเขียนข้อมูลด้วยหน่วยความจำมีประสิทธิภาพสูงขึ้นมาก โดยเฉพาะเมื่อต้องประมวลผลชุดข้อมูลระดับแสนหรือล้านแถว
// ตัวอย่างการจัดการ SharedStringTable ใน C#
using DocumentFormat.OpenXml;
using OpenXmlSDK;
// 1. สร้างตารางสตริงและเพิ่มข้อความที่ซ้ำกันเข้าไปก่อน
SharedStringTable sharedStrings = new SharedStringTable();
sharedStrings.Append(new SharedString(“Product A”)); // Index 0
sharedStrings.Append(new SharedString(“Region North”)); // Index 1
// 2. กำหนดค่าเซลล์โดยใช้ดัชนี (Index) แทนการใส่ข้อความเต็มๆ
Cell cell = new Cell();
cell.SetCellValue(sharedStrings.GetSharedString(0)); // อ้างอิงถึง “Product A”