บทความเทคนิค

บทความเทคนิค: Export Excel to CSV, TSV, and HTML in Delphi (HotXLS) ภาษาไทย

ฉบับแปลนี้เจาะประเด็น Exporting Excel Workbooks to CSV, TSV, HTML, and RTF from Delphi with HotXLS โดยยึดบทความภาษาอังกฤษที่อัปเดตแล้วเป็นฐานอ้างอิงทางเทคนิคสำหรับทีม Delphi, PDF และซอฟต์แวร์เอกสาร

หน้านี้แปลงบทความฐานที่อัปเดตแล้วให้เป็นจุดตรวจสอบที่ใช้ได้จริงสำหรับการออกแบบ การนำไปใช้ และการตรวจสอบผล

เนื้อหาที่ซิงก์จากบทความภาษาอังกฤษ

บทความต้นฉบับภาษาอังกฤษได้รับการขยายด้วยบริบทการใช้งานจริง จุดตัดสินใจเชิงเทคนิค และตัวอย่างที่เป็นรูปธรรม หน้านี้จึงควรใช้เป็นคู่มือทำงาน ไม่ใช่บทสรุปสั้น

หัวข้อสำคัญในบทความฐานที่อัปเดตแล้ว:

  • ใช้ไฟล์นำเข้าขนาดเล็กที่ทำซ้ำได้ก่อนเชื่อมฟีเจอร์กับข้อมูลจริง
  • คงชื่อผลิตภัณฑ์ ชื่อ API ชื่อไฟล์ และค่า literal ไว้ตามเดิม
  • เก็บผล validator และข้อมูลเวอร์ชันไว้พร้อมไฟล์ตัวอย่างที่สร้างขึ้น

ทางเลือกสำหรับการนำไปใช้จริง

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

  • ใช้ไฟล์นำเข้าขนาดเล็กที่ทำซ้ำได้ก่อนเชื่อมฟีเจอร์กับข้อมูลจริง
  • คงชื่อผลิตภัณฑ์ ชื่อ API ชื่อไฟล์ และค่า literal ไว้ตามเดิม
  • เก็บผล validator และข้อมูลเวอร์ชันไว้พร้อมไฟล์ตัวอย่างที่สร้างขึ้น

โค้ดและจุดอ้างอิง API

ตัวอย่างโค้ดคงไว้ตามเดิมเพื่อให้นักพัฒนาเทียบกับโปรเจ็กต์ Delphi, C++Builder และ Lazarus/FPC ได้โดยตรง

var
  Book: TXLSXWorkbook;
  Sheet: TXLSXWorksheet;
  R: Integer;
begin
  Book := TXLSXWorkbook.Create;
  try
    Book.Open('invoice-run.xlsx');
    Sheet := Book.Sheets[0];

    // Materialize formula results so the CSV carries numbers, not '=...' text
    for R := 2 to 41 do
      if Sheet.Cells[R, 4].Formula <> '' then
        Sheet.Cells[R, 4].Value := Book.Calculate(Sheet.Cells[R, 4].Formula);

    Book.SaveAsCSV('feed.csv', 0, ',');    // sheet 0, comma
    Book.SaveAsCSV('feed.tsv', 0, #9);     // same sheet as TSV
  finally
    Book.Free;
  end;
end;
var
  Opts: TXLSXHtmlExportOptions;
begin
  Opts := TXLSXHtmlExportOptions.Create;
  try
    Opts.Title := 'Weekly settlement';
    Opts.TableClass := 'report-grid';     // hook for the host page stylesheet
    Opts.WriteDocument := True;           // full page, not a fragment
    if Book.SaveAsHTML('settlement.html', 0, Opts) <> 0 then
      raise Exception.Create('Sheet index out of range');
  finally
    Opts.Free;
  end;
end;

การตรวจสอบก่อนเผยแพร่

ตรวจไฟล์ผลลัพธ์ด้วยเครื่องมือเดียวกับที่ลูกค้าหรือระบบเก็บถาวรใช้ บันทึกเวอร์ชันคอมโพเนนต์ ข้อมูลทดสอบ เวอร์ชัน validator และผลที่สังเกตได้เพื่อไล่รอย regression ได้ชัดเจน

อ่านเพิ่มเติม

หมายเหตุเพิ่มเติม

ส่วนเสริมนี้ทำให้เวอร์ชันสั้นกลายเป็นคู่มือที่ใช้งานได้จริงมากขึ้น และยังคงสอดคล้องกับ Exporting Excel Workbooks to CSV, TSV, HTML, and RTF from Delphi with HotXLS รวมถึงฐานทางเทคนิคของบทความภาษาอังกฤษ เนื้อหาควรแสดงให้ชัดว่าเรื่องเริ่มจาก input แบบใด คาดหวัง output อะไร และต้องยืนยันพฤติกรรมตรงจุดไหนผ่าน validation

ลำดับของการตัดสินใจสำคัญมาก: เริ่มจากรูปแบบข้อมูล ต่อด้วยขอบเขตของการเปลี่ยนแปลง จากนั้นคือ dependency ของ API แล้วจึงถึงพฤติกรรมสุดท้าย หากบทความพูดถึงหลายทางเลือก ก็ควรอธิบายด้วยว่าทางไหนเหมาะกับ maintenance, support และการทำซ้ำปัญหามากกว่า

code block ชื่อไฟล์ ชื่อ API และค่า literal ทุกอย่างต้องคงเดิม คำอธิบายรอบ ๆ จะขยายได้ แต่ตัวอย่างโค้ดต้องเป็นจุดอ้างอิงที่แม่นยำ เพื่อให้ผู้อ่านเทียบกับโปรเจ็กต์ Delphi, C++Builder หรือ Lazarus/FPC ของตนได้ตรง ๆ

ส่วน validation ควรพูดถึงไฟล์ตัวอย่างขนาดเล็ก การเทียบผลลัพธ์ และการบันทึก version ของ component หรือ validator ถ้าหน้านี้อธิบาย bug fix หรือ migration ต้องระบุเส้นทางการทำซ้ำ สถานะเริ่มต้นที่เห็น และจุดยืนยันให้ชัด เพื่อให้ติดตาม regression ได้โดยไม่ต้องเดา

การขยายแบบนี้ทำให้หน้ายังมีประโยชน์หลังอ่านครั้งแรก ทั้งสำหรับ reviewer ในฐานะคำอธิบายเหตุผล สำหรับ support ในฐานะบริบทการวิเคราะห์ และสำหรับทีมดูแลในฐานะบันทึกอ้างอิงก่อนการเปลี่ยนแปลงครั้งถัดไป

  • อย่าเปลี่ยนชื่อผลิตภัณฑ์ API ไฟล์ หรือ literal
  • ถ้ามี code block ให้คงไว้ตามเดิม
  • อธิบาย validation ด้วยไฟล์ตัวอย่างและผลลัพธ์ที่เทียบกันได้
  • แสดงลำดับการตัดสินใจให้ชัด ไม่ใช่แค่สรุปสั้นเกินไป