API ตัวอ่านและตัวเขียนโดยตรง
TXLSDirectReader และ TXLSDirectWriter ประมวลผลแพ็กเกจ XLSX โดยไม่ต้องเก็บกริดเวิร์กชีตที่สมบูรณ์ไว้ในหน่วยความจำ ดังนั้นการเรียก API ที่อธิบายชีตจึงต้องทำก่อนหรือระหว่างเฟสการสตรีมที่เกี่ยวข้อง
วงจรชีวิตตัวเขียนและค่าเซลล์
TXLSDirectWriter.BeginFile หรือ BeginStream เริ่มแพ็กเกจ, เมธอดของชีตกำหนดเวิร์กชีตหนึ่งตัวในแต่ละครั้ง และ Finish ยืนยันแพ็กเกจสุดท้าย
| เซลล์สเกลาร์ | WriteString, WriteRichString, WriteNumber, WriteBoolean, WriteDateTime และ WriteError |
| เซลล์สูตร | WriteFormula, WriteFormulaNumber, WriteFormulaString, WriteFormulaBoolean, WriteFormulaDateTime และ WriteFormulaError ยอมรับผลลัพธ์ที่แคชซึ่งผู้เรียกให้มา |
| สตริงที่ใช้ร่วมกัน | UseSharedStrings เปิดใช้การตัดสตริงซ้ำระดับแพ็กเกจ |
| สถิติ | CellCount รายงานจำนวนเซลล์ที่ปล่อยออกมา |
| Panes | FreezePanes(ColSplit, RowSplit) เขียน frozen split ที่คอลัมน์และแถวแบบเริ่มนับหนึ่งที่ระบุ |
แถวและคอลัมน์เริ่มจากหนึ่งในพื้นผิวตัวเขียนสาธารณะ และต้องระบุตามลำดับเวิร์กชีตแบบไปข้างหน้า
สไตล์ที่นำกลับมาใช้ใหม่ได้
AddCellStyle ลงทะเบียนแฮนเดิลสไตล์ระดับแพ็กเกจที่ไม่เปลี่ยนรูป และ CloneCellStyle สร้างแฮนเดิลใหม่โดยไม่เก็บแถวเวิร์กชีต
ชื่อที่กำหนดและไฮเปอร์ลิงก์
AddDefinedName, AddLocalDefinedName, AddDefinedRange และ AddLocalDefinedRange เพิ่มชื่อระดับสมุดงานหรือระดับชีตก่อนการทำให้แพ็กเกจเสร็จสมบูรณ์
AddHyperlink, AddHyperlinkRange, AddInternalHyperlink และ AddInternalHyperlinkRange ปล่อยความสัมพันธ์ภายนอกหรือตำแหน่งชีตภายในสำหรับหนึ่งเซลล์หรือช่วง
การตรวจสอบข้อมูล
AddDataValidation และ AddDataValidationSqRef เปิดเผยพื้นผิวกฎทั้งหมด ในขณะที่ AddListValidation, AddWholeNumberValidation, AddDecimalValidation, AddDateValidation, AddTimeValidation, AddTextLengthValidation และ AddCustomValidation ให้ตัวช่วยแบบมีประเภท
การจัดรูปแบบตามเงื่อนไข
AddConditionalFormat, AddConditionalFormatExpression, AddConditionalFormatContainsText, AddConditionalFormatNotContainsText, AddConditionalFormatBeginsWith, AddConditionalFormatEndsWith, AddConditionalFormatTop10, AddConditionalFormatAboveAverage, AddConditionalFormatDuplicateValues, AddConditionalFormatUniqueValues, AddConditionalFormatContainsBlanks, AddConditionalFormatNotContainsBlanks, AddConditionalFormatContainsErrors และ AddConditionalFormatNotContainsErrors เพิ่มกฎสเกลาร์
AddConditionalFormatDataBar, AddConditionalFormatColorScale2, AddConditionalFormatColorScale3 และ AddConditionalFormatIconSet เพิ่มกฎภาพ; ClearConditionalFormats ลบกฎที่รอดำเนินการสำหรับชีตปัจจุบัน
AutoFilter และตาราง
AddAutoFilterValue, AddAutoFilterDateGroup และ AddAutoFilterSortCondition กำหนดค่าตัวกรองเวิร์กชีต
AddTable สร้างส่วนตาราง และ AddTableFilterValue, AddTableFilterDateGroup และ AddTableSortCondition กำหนดค่าสถานะตัวกรองและการจัดเรียง
การป้องกันและการแบ่งหน้า
ProtectSheet, UnprotectSheet, AddProtectedRange และ ClearProtectedRanges กำหนดค่าการป้องกันเวิร์กชีต; ProtectWorkbook และ UnprotectWorkbook กำหนดค่าโครงสร้างสมุดงานและล็อกหน้าต่าง
AddHorizontalPageBreak และ AddVerticalPageBreak ปล่อยการแบ่งหน้าด้วยตนเองสำหรับเวิร์กชีตปัจจุบัน
การวินิจฉัยพื้นที่เก็บข้อมูลตัวอ่านโดยตรง
TXLSDirectReader.SharedStringMemoryLimit จำกัดหน่วยความจำสตริงที่ใช้ร่วมกันที่ถอดรหัส, SharedStringsOnDisk รายงานการย้ายไปยังพื้นที่เก็บข้อมูลชั่วคราวแบบจัดทำดัชนี, SharedStringCount รายงานจำนวนรายการที่โหลด และ ParallelDiag เปิดเผยการวินิจฉัยตัวแยกวิเคราะห์แบบขนานแบบมีขอบเขต
การ projection ของตัวอ่านและสถานะสูตร
FirstRow, LastRow, IncludeColumn และ ClearColumnProjection ดันการเลือกแถวและคอลัมน์แบบเริ่มนับหนึ่งเข้าไปใน parser ของเวิร์กชีตก่อนการจองค่า, สูตร หรือ rich text
IncludeFormulaText ค่าเริ่มต้นเป็น true ถ้าปิดไป จะยังคงค่าที่แคช, พิกัด, สไตล์ และ HasFormula ไว้ โดย FormulaTextAvailable จะกลายเป็น false และ Formula ว่างไว้
เคอร์เซอร์แถว
TXLSRowCursor.Open รับไฟล์หรือ stream ได้ทั้ง XLS, XLSX, XLSM, ODS, CSV และ TSV การตรวจจับ ZIP อัตโนมัติจะแยกแพ็กเกจ ODS ออกจากเวิร์กบุ๊ก Open XML ก่อนเปิดแผ่นงาน
TXLSRowCursor.SelectSheet และ SelectSheetByName เลือกเวิร์กชีต; SheetCount, SheetNames, SheetIndex, RowIndex และ Eof เปิดเผยสถานะการสำรวจ ในขณะที่ SharedStringMemoryLimit ใช้นโยบายสตริงที่ใช้ร่วมกันแบบมีขอบเขตเดียวกันกับตัวอ่านโดยตรง
FirstRow, LastRow, IncludeColumn และ ClearColumnProjection ใช้ฟิลเตอร์แบบเริ่มนับหนึ่งชุดเดียวกันกับทุกรูปแบบของเคอร์เซอร์ ออปชันที่ส่งเข้าไปจะเปลี่ยนไม่ได้ระหว่าง FindFirst กับ EOF แต่จะกลับมาแก้ได้อีกครั้งหลังจาก EOF, การเลือกแผ่นงาน หรือการปิด
แต่ละ TXLSRowCursorCell รายงาน HasFormula แยกจาก FormulaTextAvailable XLS แบบคลาสสิกเปิดเผยการมีอยู่ของสูตรกับผลลัพธ์ที่แคชไว้ โดยไม่อ้างว่ามี token text ที่ไม่มีให้ใช้ ส่วน IncludeFormulaText ตัดข้อความสูตรของ XLSX และ ODS ออกก่อนการสะสมได้
การเดินข้อมูลใน ODS จะถือ physical row template ไว้หนึ่งตัว ตัดบล็อกแถวซ้ำให้เข้าช่วงที่ขอ เด้งตรงไปมาระหว่างคอลัมน์ที่เลือกภายในช่วงซ้ำ เลื่อนผ่านเซลล์ที่ถูกครอบโดยไม่คืนเป็นค่า และรายงานจำนวนซ้ำที่ไม่ถูกต้องหรือเกินขนาดกริดผ่าน OnSkippedRecord
State แยกแยะ xrcsClosed, xrcsBeforeFirst, xrcsActive, xrcsEof, xrcsCancelled และ xrcsFaulted; Cancel เรียกซ้ำได้ปลอดภัย (idempotent) ทำให้แถวปัจจุบันใช้ไม่ได้ และปล่อย stream ของแผ่นงานที่กำลังเปิด แต่ยังเก็บแหล่งต้นทางไว้เพื่อให้การเลือกแผ่นงานแบบระบุชัดเริ่มรอบใหม่ได้
โอเวอร์โหลดแบบ stream ใช้ xsoBorrowed เป็นค่าเริ่มต้น คืนตำแหน่งเดิมของผู้เรียกตอนปิด และรับ xsoOwned เพื่อโอนความเป็นเจ้าของหลังเปิดสำเร็จ ถ้าเปิดไม่สำเร็จจะไม่มีการใช้ความเป็นเจ้าของของผู้เรียกเด็ดขาด
CurrentRowView ยืมอาร์เรย์แถวปัจจุบันมาโดยไม่คัดลอก และตรวจ generation ก่อนทุกการเข้าถึง การเลื่อนเคอร์เซอร์, เลือกแผ่นงาน, ยกเลิก, ปิด หรือทำลายเคอร์เซอร์ จะทำให้ view ใช้ไม่ได้ และการเข้าถึงหลังจากนั้นจะ raise EXLSRowCursorViewInvalidated
PeakRowBufferedBytes เป็นค่าประมาณแบบ monotonic นับตั้งแต่ Open ล่าสุด สำหรับระเบียนเซลล์, payload ที่จัดการ, rich text และข้อมูลฝั่งฟอร์แมตที่เก็บไว้ต่อหนึ่งแถวตรรกะ เจตนาให้ใช้วินิจฉัย regression เรื่องหน่วยความจำมีขอบเขต ไม่ใช่บัญชี heap ที่แม่นยำ
SheetPassesStarted นับจำนวนครั้งที่ backend ของแผ่นงานเริ่มสำเร็จ การอ่านชื่อแผ่นงานหรือข้ามแผ่นงานผ่าน callback facade จะไม่เปิด worksheet part
ตัวปรับ callback แบบ forward
TXLSForwardReader โยนงาน decode ของ XLS, XLSX, ODS, CSV และ TSV ให้ TXLSRowCursor แปลงเซลล์ในแถวปัจจุบันเป็น callback OnCell และคงสัญญาเดิมทั้งหมดไว้ ทั้งขอบเขตแถว, projection คอลัมน์, สถานะสูตร, rich text, รหัสผ่าน, skipped-record, ตำแหน่ง stream และบัฟเฟอร์มีขอบเขต
PeakRowBufferedBytes และ SheetPassesStarted เปิดเผยการวินิจฉัยเคอร์เซอร์ที่ใช้ร่วมกันบนพื้นผิว callback ส่วน XLS แบบคลาสสิกยังเก็บ ClassicBytesRead และ ClassicPeakBufferedBytes เพิ่มมาด้วย
event ของตัวอ่านและชนิด record
ตัวอ่านและ row cursor เปิดเผย callback แบบเลือกใช้กับ plain record ซึ่งประกาศไว้ทั้งหมดใน lxDirectRead callback ทุกตัวมีรูปร่างเดียวกัน: record จะอธิบายไอเทมที่สตรีมมาหนึ่งชิ้น และการตั้ง Abort จะหยุดการสแกน (event ระดับแผ่นงานรับ SkipSheet เพิ่มด้วย)
| เซลล์ | OnCell (ชนิด TXLSDirectCellEvent) ส่ง TXLSDirectCell หนึ่งตัวต่อเซลล์ โดย Kind (TXLSDirectCellKind: xdkEmpty, xdkNumber, xdkString, xdkBoolean, xdkDate, xdkError) เลือกฟิลด์ค่าที่มีข้อมูล; rich text เดินทางในรูป TXLSDirectRichText ที่ถือรายการ TXLSDirectRichTextRun แต่ละตัวมี TXLSDirectRichColor (ชนิด TXLSDirectRichColorKind), TXLSDirectRichUnderline และ TXLSDirectRichVertAlign พร้อมข้อมูล TXLSDirectPhoneticProperties กับ TXLSDirectPhoneticRun แบบไม่บังคับ |
| กรอบแผ่นงาน | OnSheet (TXLSDirectSheetEvent) ข้ามแผ่นงานทั้งแผ่นได้ก่อนที่เซลล์จะถูก parse; OnSkippedRecord (TXLSDirectSkippedEvent) รายงานเนื้อหาที่ผิดรูปแบบหรือถูกตัดขาด พร้อม record id และเหตุผล |
| เลย์เอาต์แผ่นงาน | OnDimension, OnSheetFormat, OnColumn, OnRow, OnMerge และ OnPane ส่ง record TXLSDirectDimension, TXLSDirectSheetFormat, TXLSDirectColumn, TXLSDirectRow, TXLSDirectMerge และ TXLSDirectPane; สถานะ pane ใช้ TXLSDirectPaneState (xdpsSplit, xdpsFrozen, xdpsFrozenSplit, xdpsUnknown) |
| สถานะเคอร์เซอร์ | TXLSRowCursor.State เป็น TXLSRowCursorState (xrcsClosed, xrcsBeforeFirst, xrcsActive, xrcsEof, xrcsCancelled, xrcsFaulted); โอเวอร์โหลด stream ของ Open รับ TXLSStreamOwnership (ค่าเริ่มต้น xsoBorrowed, ใช้ xsoOwned เพื่อโอนความเป็นเจ้าของ) และ CurrentRowView คืน view แบบยืม IXLSRowCursorView ที่พร็อพเพอร์ตี้ Valid คุมการเข้าถึง และ ValueByCol อ่านเซลล์หนึ่งเซลล์ของแถวที่ยืมมาโดยไม่คัดลอก view จะใช้ไม่ได้เมื่อเคอร์เซอร์เลื่อนไปแล้ว |
ชนิดพารามิเตอร์และสไตล์ของตัวเขียน
ตัวช่วยแบบมีชนิดของตัวเขียน (lxDirectWrite) รับ record กับ enum เพื่อให้การเรียกไม่ต้องจองหน่วยความจำ: WriteRichString รับ TXLSDirectRichText; AddCellStyle สร้างสไตล์ระดับแพ็กเกจจาก TXLSDirectCellStyle ที่การจัดวาง (TXLSDirectHorizontalAlignment, TXLSDirectVerticalAlignment), ขีดเส้นใต้ (TXLSDirectUnderline), ลวดลายพื้นหลัง (TXLSDirectFillPattern) และเส้นขอบแต่ละด้าน (TXLSDirectStyleBorder กับ TXLSDirectBorderSide) สะท้อนโมเดลสไตล์ของ OOXML การจัดรูปแบบตามเงื่อนไขส่ง TXLSDirectConditionalFormat พร้อม TXLSDirectCfKind / TXLSDirectCfOperator / TXLSDirectCfValue / TXLSDirectCfValueKind และ TXLSDirectIconSetType, data validation ใช้ TXLSDirectDataValidation, ตารางใช้ TXLSDirectTable, ไฮเปอร์ลิงก์ใช้ TXLSDirectHyperlink, ชื่อที่กำหนดใช้ TXLSDirectDefinedName, differential style ใช้ TXLSDirectDxfStyle, คอมเมนต์ใช้ TXLSDirectComment, รูปภาพใช้ TXLSDirectImage กับ TXLSDirectImageFormat, แผนภูมิใช้ TXLSDirectChart กับ TXLSDirectChartSeries และ TXLSDirectChartType, merge ใช้ TXLSDirectMergeRange, protected range ใช้ TXLSDirectProtectedRange, การป้องกันแผ่นงานใช้เซ็ต TXLSDirectSheetProtectionOptions ของ TXLSDirectSheetProtectionOption, สถานะการจัดเรียงของ auto-filter ใช้ TXLSDirectSortState, ออปชันคอลัมน์ใช้ TXLSDirectColumnOption และเรขาคณิตหน้ากระดาษใช้ record TXLSDirectPageMargins
TXLSDirectNeedRow = procedure(Sender: TObject; RowIndex: Integer;
var Eof: Boolean) of object;
function XLSDirectColName(Col: Integer): WideString;
function XLSDirectParseRef(const Ref: WideString;
out Col, Row: Integer): Boolean;
function XLSDirectPasswordHash(const Password: WideString): WideString;
OnNeedRow ดึงแถวจากแอปพลิเคชัน: ผู้ส่งเขียนเซลล์ของแถวผ่านตัวเขียนตรง ๆ แล้วปล่อย Eof = False หรือประกาศว่าข้อมูลหมดด้วย Eof = True เพื่อจบลูป ตัวช่วยเหล่านี้แปลงระหว่างพิกัดกับ primitive ของการป้องกัน: XLSDirectColName แปลงคอลัมน์แบบเริ่มศูนย์เป็นตัวอักษร A1, XLSDirectParseRef parse การอ้างอิงเซลล์แบบ A1 และ XLSDirectPasswordHash คำนวณ password hash แบบเก่าที่ระเบียนการป้องกันแผ่นงานเก็บไว้