XLSX 外觀概觀 (lxHandleX)
lxHandleX 是 Excel 2007+ (.xlsx) 及 OpenDocument 試算表 (.ods) 活頁簿工作流程的專屬門面單元;它與原本的 lxHandle 門面共存,因此舊有程式碼無需任何修改即可繼續運作:
lxHandle— Excel 97-2003 BIFF 格式 (.xls)、HTML、RTF、CSV 及 TSV 匯出的主要門面;所有現有的使用者程式碼可繼續使用此單元而無需任何修改lxHandleX— Excel 2007+ OOXML 格式 (.xlsx)、ODS 讀寫工作流程與 XLSB 值與樣式子集的主要門面;它提供獨立的活頁簿與工作表類型,並透過Open、SourceFormat、明確的輸出格式與TODSExportOptions提供套件自動偵測
類別階層
XLSX 外觀公開下列類別:
type
TXLSXWorkbook = class // top-level workbook with SaveAs / Open
TXLSXHtmlExportOptions = class // HTML document, style, BOM, and table class options
TODSExportOptions = class // ODS export options for generator, chart, and image output
TXLSXSheets = class // worksheet collection on the workbook
TXLSXFonts = class // workbook-level font palette
TXLSXFont = class // single font descriptor
TXLSXFills = class // workbook-level fill palette
TXLSXFill = class // single fill (pattern + fg/bg color)
TXLSXBorders = class // workbook-level border palette
TXLSXBorder = class // four edges + diagonal border
TXLSXNumberFormats = class // workbook-level custom format codes
TXLSXDefinedNames = class // workbook-level named ranges
TXLSXWorksheet = class // single worksheet with cells and decorations
TXLSXCells = class // cell collection on the worksheet
TXLSXCell = class // single cell (value, formula, *Index style refs)
TXLSXRange = class // rectangular worksheet range wrapper
TXLSXMergedCells = class // merged-range collection
TXLSXHyperlinks = class // hyperlink collection
TXLSXComments = class // cell-comment collection
TXLSXImages = class // image collection (drawings + media)
TXLSXConditionalFormats = class // conditional formatting rules
TXLSXDataValidations = class // data-validation rules
TXLSXTables = class // Excel-style table collection
TXLSXCharts = class // chart collection (anchored or full-page)
TXLSXChart = class // single chart (column / bar / line / pie / scatter / bubble / radar)
TXLSXChartSeries = class // chart series with category, value, and bubble-size ranges
TXLSXTextBox = class // standalone worksheet drawing text box
TXLSXRichText = class // per-run rich-text payload for cells
TXLSXAlignment = class // cell alignment / wrap / indent / rotation
TXLSXExternalLinks = class // external workbook link collection
TXLSXExternalLink = class // single external workbook reference (Target URL + SheetNames)
這些類別獨立於 lxHandle.TXLSWorkBook 及
lxHandle.TXLSWorksheet,需要這兩種格式的應用程式可以
並排使用這兩種外觀介面
uses
lxHandle, // XLS / HTML / RTF / CSV workbook (TXLSWorkBook)
lxHandleX; // XLSX workbook (TXLSXWorkbook)
快速入門
XLSX 外觀遵循與 BIFF
外觀相同的呼叫形式規範 —— 活頁簿上的 SaveAs / Open、
工作表集合上的 Sheets.Add / Sheets[i],
以及儲存格集合上的 Cells.Item[Row, Col].Value,下方的範例寫入了一個展示所有
目前支援功能的小型活頁簿:
uses lxHandleX;
var
wb: TXLSXWorkbook;
ws: TXLSXWorksheet;
bold, yellow, box, currency: Integer;
begin
wb := TXLSXWorkbook.Create;
try
bold := wb.Fonts.Add('Calibri', 12, True, False);
yellow := wb.Fills.AddSolid($FFFFFF00);
box := wb.Borders.AddBox(xlsxBorderThin);
currency := wb.NumberFormats.Add('"$"#,##0.00');
ws := wb.Sheets.Add('Demo');
ws.Cells.Item[1, 1].Value := 'Hello';
ws.Cells.Item[1, 1].FontIndex := bold + 1;
ws.Cells.Item[1, 2].Value := 123.45;
ws.Cells.Item[1, 2].NumberFormatIndex := currency + 1;
ws.Cells.Item[2, 1].Value := Now; // tagged as date
ws.Cells.Item[2, 2].Formula := 'SUM(B1:B1)';
ws.Cells.Item[3, 1].FillIndex := yellow + 1; // highlight cell
ws.Cells.Item[3, 2].BorderIndex := box + 1; // boxed cell
ws.ColWidth[1] := 24;
ws.RowHeight[1] := 28;
ws.MergeCells(4, 1, 4, 3);
ws.Range['A8:C10'].Merge(True); // merge across rows
ws.AddHyperlink(5, 1, 'https://www.loslab.com', 'Visit losLab');
ws.AddComment(5, 2, 'Important note', 'Kevin');
ws.AddImageFromFile(6, 1, 'logo.png');
ws.AddConditionalFormat('B1:B10', xlsxCfOpGreaterThan, '100');
ws.AddListValidation('C1:C5', 'Yes,No,Maybe');
wb.DefinedNames.Add('SalesData', 'Demo!$A$1:$B$10');
wb.SaveAs('demo.xlsx');
finally
wb.Free;
end;
end;
支援的功能
- 儲存格值:數字、布林值、字串、日期、公式
- 在寫入路徑上具有重複資料刪除功能的共用字串表 (
xl/sharedStrings.xml) - 活頁簿層級的樣式調色盤——
Workbook.Fonts、Fills、Borders及NumberFormats——加上每個儲存格的FontIndex/FillIndex/BorderIndex/NumberFormatIndex;SaveAs 會輸出真實的<fonts>/<fills>/<borders>/<numFmts>+<cellXfs>區塊;Open 會將其剖析回來,使名稱/大小/粗體/斜體/色彩、填滿樣式、框線邊緣以及自訂數值格式在來回轉換中皆能完整保留 - 透過
Worksheet.ColWidth[Col]設定每欄寬度,以及透過Worksheet.RowHeight[Row]設定每列高度(工作表<cols>區塊和每個<row>的ht屬性) - 位於索引
XlsxXfIndexDate的內建日期cellXf;系統會自動標記TDateTime值 - 合併的儲存格 (
<mergeCells>),包括跨列進行 Excel 樣式合併的TXLSXRange.Merge(True) - 透過
Worksheet.Range、RCRange、UsedRange、EntireRow與EntireColumn的工作表範圍;有關批次值、公式、SetArrayFormula、樣式索引、數值格式、框線、保護旗標、自動調整大小、合併、位移、調整大小、Sort多重鍵值排序、ApplyBuiltinStyle內建儲存格樣式、複製/移動輔助方法、整列/整欄插入/刪除輔助方法,以及已選取範圍的 HTML 匯出,請參閱 TXLSXRange - 由每個工作表外部 URL 的 rels 支援的超連結 (
<hyperlinks>) - 具有 VML 繪圖的儲存格註解 (
xl/commentsN.xml+xl/drawings/vmlDrawingN.vml),讓提示方框能在 Excel 中呈現 - 透過
Worksheet.Images提供的內嵌圖片 (PNG / JPEG / GIF / BMP),寫入至xl/media/imageN.<ext>加上各工作表的繪圖 XML 與關聯檔案 - 透過
Worksheet.AddTextBox支援的獨立繪圖文字方塊,寫入為具有文字主體的工作表繪圖圖案,而非儲存格註解,並提供直接錨點查閱和範圍刪除協助工具 - 透過
Workbook.DefinedNames的活頁簿層級命名範圍 (可為活頁簿範圍,或透過SheetIndex指定工作表範圍) - 透過
Workbook.Calculate與Worksheet.Calculate進行公式計算,共享 XLS 公式剖析器與計算器,以處理等號開頭的公式、儲存格與範圍參照、參照的公式儲存格、跨工作表參照、定義名稱範圍,以及支援的文字、日期、工作日、工程/進位轉換、位元、統計、彙總和數學函數;使用Workbook.OnUserFunction或Workbook.OnUserFunctionEx來解析自訂或未支援的函數 - 每個工作表的條件式格式設定 (
Worksheet.ConditionalFormats) 和資料驗證 (Worksheet.DataValidations),包括下拉式選單AddListValidation(Range, Items)捷徑 - 列/欄大綱群組 (
RowOutlineLevel、ColOutlineLevel)、隱藏狀態 (RowHidden、ColHidden) 以及摺疊群組狀態 (RowCollapsed、ColCollapsed) - 透過
Worksheet.FreezePanes(Row, Col)設定凍結視窗 - 頁面設定——六個邊界屬性、紙張大小、方向、頁面比例、符合寬度 / 符合高度,加上
HeaderText/FooterText;命名為xlsxPaper*的常數,例如xlsxPaperLetter、xlsxPaperA4、xlsxPaperA3和xlsxPaperLegal,可指派給PaperSize - 自動篩選 (
Worksheet.SetAutoFilter) - 具有樣式資訊與 tableColumns 的 Excel 樣式表格 (TXLSXTable)
外觀子集合 API
外觀集合類別管理條件式格式設定、資料驗證、具名範圍、圖片和表格,以下是每個集合的核心成員:
- TXLSXConditionalFormats:
提供條件式格式設定規則;
屬性:
Count方法:AddAboveAverage,AddColorScale2,AddColorScale3,AddDataBar,AddExisting,AddExpression,AddIconSet,AddSimpleRule,AddTextRule,AddTop10,DeleteAt,DeleteInRange,FindAt,IndexOfCell - TXLSXDataValidations:
提供資料驗證;
屬性:
Count方法:AddExisting,AddList,DeleteAt,DeleteInRange,FindAt,IndexOfCell - TXLSXDefinedNames:
提供定義名稱(具名範圍);
屬性:
Count方法:DeleteByName,FindByName,IndexOfName - TXLSXImages:
提供內嵌圖片;
屬性:
Count方法:DeleteAt,DeleteInRange,FindAt,IndexOfCell - TXLSXTables:
提供 Excel 表格;
屬性:
Count方法:AddExisting,DeleteByName,FindByName,IndexOfName - TXLSConnections:
透過
Workbook.Connections提供活頁簿外部資料連線 屬性:Count方法:Add,AddExisting,FindById,FindByName,NextId,Validate - TXLSQueryTables:
透過
Worksheet.QueryTables提供工作表查詢結果定義 屬性:Count方法:Add,AddExisting,FindByName,FindByResultTableName,Validate
支援的功能
- 寫入至
docProps/core.xml+docProps/app.xml的 文件屬性 (Workbook.Title、Author、Subject、Keywords、Description、LastModifiedBy、Company等) - 透過
Worksheet.Protect/Workbook.ProtectWorkbook進行工作表 / 活頁簿密碼保護 (傳統 16 位元雜湊);透過SaveAsEncrypted進行 Excel 相容的 AES 密碼保護儲存,可用時使用 AES-NI 加速,否則使用可攜式軟體相容方案;在解密支援加入之前,OpenEncrypted針對加密套件仍會拋出異常 - 透過
Workbook.LoadVbaProjectFromFile/VbaProject保留 VBA 專案;位元組來回轉換保持不變,有效的vbaProject.bin承載亦可透過Workbook.ParsedVBAProject進行檢查 - 圖表 — 透過 TXLSXChart 提供的直條圖/條形圖/折線圖/圓餅圖/面積圖/環形圖,
可錨定在工作表上 (
Worksheet.AddChart),或透過Workbook.AddChartSheet(Name, Type, Title)全頁顯示在專用的圖表工作表上 - 透過具有每個區段字型格式化的 TXLSXRichText 支援富文字儲存格;透過共用字串表進行往返行程
- 透過
Worksheet.AddHyperlinkToCell(Row, Col, "Sheet2!A1")設定內部超連結錨點(不需要 rels 關聯性) - 工作表上的儲存格範圍複製/移動/清除 API
(
CopyRange,CopyRangeTo,MoveRange,ClearRange) - 透過 TXLSXAlignment +
個別儲存格
AlignmentIndex進行的儲存格對齊 - 透過
Worksheet.TabColor/TabColorIsAuto設定工作表頁籤色彩 - 透過
Worksheet.View設定工作表檢視模式,包括標準檢視、分頁預覽與版面配置檢視 - 串流 SaveAs 路徑(
Workbook.StreamingWrite := True), 可建置並寫入每個工作表,而不必將其他工作表保留在 記憶體中;每列 XML 累加器使用TXLSWideStringBuilder,使儲存格迴圈保持線性 - 對上述所有內容進行往返行程
Open,但加密的 XLSX 封裝和圖表工作表識別除外,這些內容會還原為已記載的部分行為 - 串流架構的匯出與匯入:供記憶體內或 BLOB 欄位使用的
SaveAs(Stream)、Open(Stream) - OpenDocument 試算表讀取/寫入:
Workbook.OpenODS與通用的Workbook.Open可載入.ods封裝,而Workbook.SaveAsODS與SaveAs(..., xlsxOpenDocumentSpreadsheet)則直接寫入 ODS 輸出;在支援的往返行程中,格式範圍涵蓋了值、公式、樣式、富文字、列/欄尺寸、合併、超連結、圖片、圖表、命名範圍、自動篩選、條件式格式設定、資料驗證、凍結視窗、頁面設定、頁首/頁尾、列印範圍、分頁線、大綱群組、頁籤色彩以及工作表可見性 - ODS 匯出選項:將
TODSExportOptions傳遞給SaveAsODS,以覆寫文件產生器字串,或在產生較輕量封裝時隱藏圖表和圖片組件 - 分隔文字匯入:
Workbook.OpenCSV(FileName)與Workbook.OpenCSV(Stream)能以 分隔符號探測、BOM 編碼偵測、RFC 4180 樣式的括號規則、 以及選填的值類型推導來匯入 CSV 或 TSV 資料,Open(FileName)會自動 將.csv與.tsv檔案導向至 匯入器 - 活頁簿中繼資料掃描:
Workbook.GetSheetNames(FileName, List)與Workbook.GetSheetNames(Stream, List)可從xl/workbook.xml讀取依序排列的工作表名稱,而不需要載入工作表 XML - 儲存格保護:
TXLSXCell.Locked與FormulaHidden— 控制在保護工作表時,哪些儲存格可編輯,或 其公式為可見 - 根據儲存格內容自動調整欄寬與列高:
Worksheet.AutoFitColumn、AutoFitColumns、Worksheet.AutoFitRow、AutoFitRows - 具有完整串聯的列/欄插入與刪除:
InsertRows、DeleteRows、InsertCols、DeleteCols;副作用會傳播到儲存格、合併範圍、超連結、註解、凍結視窗、範圍字串參照、表格、儲存格公式、條件式格式設定/資料驗證公式、內部超連結目標、列印設定參照、手動分頁線、自動篩選欄條件、圖表數列範圍、定義名稱、圖片錨點和圖表錨點 - 擴充頁面設定:
PrintArea、PrintTitleRows、PrintTitleCols、PrintGridlines、PrintHeadings、BlackAndWhite、Draft、PrintNotes、PrintOverThenDown - 不透明印表機驅動程式承載存取:透過
PrinterDriverData、HasPrinterDriverData與ClearPrinterDriverData;位元組陣列與工作表副本各自擁有所有權,承載上限 1 MiB,清除時會一併移除工作表關聯與二進位封裝部件,而不覆寫具型別的版面設定欄位;載入時只綁定帶必要關聯型別與既有目標的精確pageSetup關聯識別碼,而缺少、型別錯誤或懸空的參照會發出xlsDiagnosticPrinterSettingsRelationshipInvalid,不會借用其他二進位部件 - 活頁簿層級的呈現校準:透過
RenderCalibration、CaptureRenderCalibration與ResetRenderCalibration,提供經過驗證的整記錄指派,以及寬度、高度、行距、儲存格邊界、螢幕縮放與量測 DPI 的獨立作業快照 - 作業自有的幾何與字型量測:透過
CreateRenderGeometry,具備不可變的校準與活頁簿產生序號身分、完整的字型與換列感知快取鍵、有界的本機快取,以及共用的像素、點、欄寬、MDW 與可用儲存格寬度轉換 - AutoFit 每個作業擷取一份活頁簿本機的幾何快照, 並以校準後的行距與邊界量測可見儲存格字型與換列文字;分頁則每次建置擷取一份獨立快照,在下次建置前保持既有邏輯頁面不變,且永不寫入工作表尺寸
- 工作表可見性:
Worksheet.Visibility(xlsxSheetVisible/xlsxSheetHidden/xlsxSheetVeryHidden)與IsSelected - 手動分頁線:
AddRowBreak、AddColBreak、索引查閱以及範圍移除協助程式 - 自動篩選欄準則:
具有單一或 AND/OR 雙重準則篩選規則的
Worksheet.AddAutoFilterColumn,加上 用於直接尋找和移除準則的Worksheet.AutoFilterColumns.FindByColId與DeleteByColId(TXLSXAutoFilterColumn) - 活頁簿日期基準:
Workbook.Date1904可在 1900 (Windows 預設) 與 1904 (Mac) 日期起算點之間切換 - 對角線框線:
TXLSXBorder.DiagonalUp與DiagonalDown啟用對角線;Diagonal邊緣承載樣式與顏色 - 擴充字型屬性:
TXLSXFont.VertAlign(上標/下標)、OutlineFont、Shadow、Family、CharSet - 命名範圍中繼資料:
TXLSXDefinedName.Hidden與Comment - 工作表檢視選項:
Worksheet.Zoom、DisplayGridLines、DisplayZeros、DisplayRightToLeft、StandardWidth、StandardHeight - OOXML 舊版索引色彩調色盤:具有
ResetIndexedColors的Workbook.IndexedColor[0..63] - 外部活頁簿連結:
Workbook.ExternalLinks/ TXLSXExternalLink — 目標 URL + SheetNames 中繼資料來回處理 - 外部資料連線與查詢結果:
Workbook.Connections/Worksheet.QueryTables—— 具型別的重新整理、認證、命令、Web、文字、參數、欄位、資料表與已定義名稱繫結,並具備擴充安全的來回處理 TXLSXFont、TXLSXFill及TXLSXBorderEdge的佈景主題色彩支援: 具有優先順序的ColorTheme/ColorIndex/TintAndShade屬性 (佈景主題 > 索引 > RGB)- BIFF8 轉換:透過
SaveXLSXWorkbookAsXLS的檔案與串流多載, 內含確定性的 56 色調色盤規劃、保留活頁簿樣式已使用的索引槽、 直接色彩超過可用槽位時的加權 OKLab 量化、疏鬆的已載入儲存格走訪, 以及超出 XLS 網格的列或欄的事前拒絕;具型別列印欄位與不透明印表機資料各自獨立轉換, BIFF8 界限會在寫入目的地串流前檢查,標準欄位優先於重複的私用預設值, 且 OOXML 專屬的UsePrinterDefaults旗標不會被合成到傳統 XLS - CSV 匯出:
Workbook.SaveAsCSV— 4 個多載 (FileName 或 Stream × 使用中工作表 / 顯式 SheetIndex + 分隔符號),具有 BOM 的 UTF-8、RFC 4180 括號規則 - HTML 匯出:
Workbook.SaveAsHTML與TXLSXRange.SaveAsHTML可為整個活頁簿工作表或僅選取的矩形區域寫入 HTML5 表格;多載選項接受TXLSXHtmlExportOptions,用以輸出完整文件、發送樣式、發送 BOM 以及命名表格類別 - RTF 匯出:
Workbook.SaveAsRTF—— 4 個多載、具有欄寬的 RTF 1.6 表格、單一儲存格字型格式化,以及透過帶正負號 16 位元\uN?逸出字元支援的完整 BMP Unicode
共用基礎架構
兩個外觀皆共用一組底層輔助單元,這意味著 樣式描述元、雜湊表、AVL 樹、ZIP 和 XML I/O、RGB 轉 HLS 轉換以及字串產生器只需編寫一次,即可由任一路徑使用, 共用的輔助單元包括:
lxStyleXf,lxStyleFont,lxStyleColor,lxStyleFill,lxStyleBorder— 現代樣式描述子lxRgb— RGB / HLS 色彩轉換lxHashTable,lxKeyList,lxAvlTree,lxCols,lxRows— 去除重複容器與 基於 AVL 的儲存格堆積建構組件lxXmlReader,lxXmlWriter,lxZipArchive— OOXML 傳輸層lxStrBuilder,lxCacheStream,lxWStream,lxZlibStream— 串流與字串組合輔助工具