HotXLS 文件

其他 XLSX 外觀 API 成員

本頁涵蓋 lxHandleX宣告的較小型公開 API 成員,包括 HTML 匯出選項,以及給直接處理 XLSX 儲存格參照或 XML 承載文字的呼叫端使用的輔助函式

公式陣列記憶體上限

property FormulaArrayMemoryLimit: Int64;
      
限制 MUNIT這類產生公式陣列所配置的承載大小,預設 64 MiB,適用於平行重算 worker,並把低於一個 Double 元素的值限縮掉

HTML 匯出選項

type
  TXLSXHtmlExportOptions = class
    constructor Create;
    property Title: WideString;
    property WriteDocument: Boolean;
    property IncludeStyles: Boolean;
    property IncludeBOM: Boolean;
    property TableClass: WideString;
  end;
      
TitleSets the document title when WriteDocument 為 True 時設定文件標題
WriteDocumentTrue 時寫出完整 HTML 文件;False 時只寫出表格片段
IncludeStyles控制匯出的 HTML 是否包含產生的 CSS 與內嵌樣式資訊
IncludeBOM控制檔案與串流輸出是否以 UTF-8 BOM 開頭
TableClass在產生的 <table> 元素上加一個 CSS 類別名稱

XLSX 參照輔助函式

function XlsxColumnLabel(Col: Integer): WideString;
function XlsxCellRef(Row, Col: Integer): WideString;
function XlsxColumnIndex(const ColumnLabel: WideString): Integer;
function XlsxParseCellRef(const Ref: WideString; out Row, Col: Integer): Boolean;
function XlsxParseRangeRef(const Ref: WideString; out Row1, Col1, Row2, Col2: Integer): Boolean;
      
XlsxColumnLabel把 1 起始的欄索引轉成 A1 樣式的欄標籤,例如 A、 Z或 AA
XlsxCellRef由 1 起始的列號與欄號組出 A1 樣式的儲存格參照
XlsxColumnIndex把 A1 樣式的欄標籤轉成 1 起始的欄索引
XlsxParseCellRef剖析單一 A1 樣式儲存格參照,並回傳列與欄座標
XlsxParseRangeRef剖析矩形的 A1 樣式範圍,回傳含兩端的 1 起始邊界

XLSX XML 逸出輔助函式

function XlsxEscapeText(const Value: WideString): WideString;
function XlsxEscapeAttr(const Value: WideString): WideString;
      
XlsxEscapeText 逸出 XML 文字節點的內容; XlsxEscapeAttr 逸出 XML 屬性值,並保留 Excel 必須精確讀回的屬性空白

進階 XLSX 成員的支援型別

本說明文件各處記載的進階 XLSX 成員,傳遞與回傳下列在 lxHandleX

{ Find and replace }
TXLSXFindFlag = (lxfMatchCase, lxfWholeCell, lxfSearchFormulas,
  lxfUseWildcards, lxfBackward, lxfByColumns);
TXLSXFindOptions = set of TXLSXFindFlag;
TXLSXReplaceAction = (raReplace, raSkip, raAbort);
TXLSXReplaceEvent = function(ARow, ACol: Integer;
  const ACurrentText: WideString; var ANewText: WideString):
  TXLSXReplaceAction of object;

{ Progress and recalculation policy }
TXLSXProgressPhase = (xlsxProgressReading, xlsxProgressWriting,
  xlsxProgressCalculating, xlsxProgressExporting);
TXLSXProgressState = (ppsBegin, ppsWork, ppsEnd);
TXLSXRecalcMode = (xrmManual, xrmIfDirty, xrmAlways);
TXLSXPasswordEvent = procedure(Sender: TObject;
  var PassWord: WideString) of object;

{ Custom document properties (docProps/custom.xml) }
TXLSXCustomPropType = (xcptText, xcptNumber, xcptDate, xcptBoolean);
TXLSXCustomProperty = class
  Name: WideString;
  PropType: TXLSXCustomPropType;
{ + TextValue, NumberValue, DateValue, BoolValue accessors }
end;

{ Table styles, fills, sorts, external links, controls, sparklines }
TXLSXTableStyleSectionKind = (xltssWholeTable, xltssHeaderRow,
  xltssTotalRow, xltssFirstColumn, xltssLastColumn, xltssFirstRowStripe,
  xltssSecondRowStripe, xltssFirstColumnStripe, xltssSecondColumnStripe,
  xltssFirstHeaderCell, xltssLastHeaderCell, xltssFirstTotalCell,
  xltssLastTotalCell { + subtotal and subheading slots });
TXLSXFillPattern = (xlsxFillNone, xlsxFillSolid, xlsxFillGray125
  { + the remaining ECMA-376 pattern values });
TXLSXGradientKind = (xlsxGradientNone, xlsxGradientLinear, xlsxGradientPath);
TXLSXSortBy = (xlsxBsValue, xlsxBsCellColor, xlsxBsFontColor, xlsxBsIcon);
TXLSXSortMethod = (xlsxSmNone, xlsxSmStroke, xlsxSmPinYin);
TXLSXExternalLinkKind = (xlsxExternalLinkUnknown, xlsxExternalLinkWorkbook,
  xlsxExternalLinkDde { + the remaining link kinds });
TXLSXFormControlType = (xfcButton, xfcCheckBox, xfcRadioButton, xfcComboBox,
  xfcListBox);
TXLSXSparklineAxisType = (xlsxSparklineAxisIndividual,
  xlsxSparklineAxisGroup, xlsxSparklineAxisCustom);
TXLSXSparklineEmptyCells = (xlsxSparklineEmptyGap, xlsxSparklineEmptyZero,
  xlsxSparklineEmptySpan);

{ Chart authoring and layout }
TXLSXChartBarGrouping = (xlsxBarGroupClustered, xlsxBarGroupStacked,
  xlsxBarGroupPercentStacked);
TXLSXChartMarkerSymbol = (xlsxMarkerAuto, xlsxMarkerCircle, xlsxMarkerDash,
  xlsxMarkerDiamond, xlsxMarkerDot, xlsxMarkerPlus, xlsxMarkerSquare,
  xlsxMarkerStar, xlsxMarkerTriangle, xlsxMarkerX, xlsxMarkerNone);
TXLSXChartDataLabelPos = (xlsxDlblPosDefault, xlsxDlblPosCenter,
  xlsxDlblPosInEnd, xlsxDlblPosOutEnd, xlsxDlblPosBestFit, xlsxDlblPosLeft,
  xlsxDlblPosRight, xlsxDlblPosTop, xlsxDlblPosBottom);
TXLSXChartMutable = class;     { mutable base of the chart model nodes }
TXLSXChartLayoutRect = record
  Left, Top, Right, Bottom: Double;
end;
TXLSXChartResolvedLayout = record
  ChartRect: TXLSXChartLayoutRect;
  TitleRect: TXLSXChartLayoutRect;
  LegendRect: TXLSXChartLayoutRect;
  PlotOuterRect: TXLSXChartLayoutRect;
  PlotInnerRect: TXLSXChartLayoutRect;
  { + per-axis title rectangles and visibility flags }
end;

{ Pagination keep-together blocks }
TXLSXKeepTogetherRange = record
  Row1, Row2: Integer;
  Level: Integer;
  ReplaceBiggerLevels: Boolean;
end;
TXLSXKeepTogetherCols = record
  Col1, Col2: Integer;
  Level: Integer;
  ReplaceBiggerLevels: Boolean;
end;

{ Diagnostics records }
TXLSXValidationIssue = record
  Row, Col: Integer;
  ValidationIndex: Integer;
  Reason: WideString;
end;
TXLSXUnknownFunctionInfo = record
  Sheet: Integer;
  Row, Col: Integer;
  Name: WideString;
  LocationKind: TXLSFormulaSymbolLocationKind;
  DefinedNameIndex: Integer;
  DefinedName: WideString;
end;
TXLSXRowMajorOrder = record
  CellOrder: array of Integer;
  RowStarts: array of Integer;
  MaxRow: Integer;
end;
      
Find and replaceTXLSXWorksheet.FindText / FindTextIn 接受 TXLSXFindOptions (區分大小寫、整格比對、搜尋公式、萬用字元、反向、依欄), ReplaceText 則接收一個 TXLSXReplaceEvent ,其結果對每一筆命中選擇 raReplace、 raSkip或 raAbort ,並提供可寫入的 ANewText 做逐格替換
Progress and savingTXLSXWorkbook.OnProgress / OnProgressEx 傳送 TXLSXProgressPhase 與(擴充形式)帶 TXLSXProgressState 旗標的 Abort ; RecalcBeforeSave 是一個 TXLSXRecalcMode ,選擇序列化前手動、僅重算有異動,或一律重算; OnPassword 是一個 TXLSXPasswordEvent ,提供開啟與寫入密碼
Custom propertiesTXLSXWorkbook.CustomProperties 是一個 TXLSXCustomProperties 集合,提供具型別的 AddText / AddNumber / AddDate / AddBoolean 建立器、 FindByName、 Delete與 Clear,外加 Count 與 Items 列舉;每個 TXLSXCustomProperty 都以對應 ECMA-376 variant 映射的 TXLSXCustomPropType 標記其值
Style overlaysTXLSXStyleOverlays 管理已儲存樣式之上的逐範圍覆寫: Add 建立一個, ApplyToCell 重新設定單一儲存格的樣式, Resolve、 ResolveRowDefault與 ResolveColumnDefault 在載入期間回答樣式查詢, HasVirtualStyle 回報是否有產生樣式, MaxVirtualRow 限制虛擬列, ApplyStructuralEdit 在列欄編輯後位移疊加層, Clear、 Count與 Items 則維護集合
Styles, fills, and overlaysTXLSXFill 透過 Pattern、 GradientKind與 GradientStops 暴露 TXLSXFillPattern、 TXLSXGradientKind與 TXLSXGradientStop; TXLSXWorksheet.StyleOverlays 是一個 TXLSXStyleOverlays 集合,其 TXLSXStyleOverlay 條目攜帶一個矩形、受影響的格式部分,以及覆寫用的儲存格樣式
Tables, sorts, and links自訂表格樣式(TXLSXWorkbook.CustomTableStyles)以 TXLSXTableStyleSectionKind 槽位建構各區段的格式:集合提供 Add、 FindByName、 Delete、 Clear、 Count與 Items,每個 TXLSXCustomTableStyle 暴露 Name、 SectionSize、 PivotStyle與 TableStyleFlag ,並回答 HasSection / ResolveSection 查詢;排序條件以 TXLSXSortBy 分類關鍵欄、以 TXLSXSortMethod決定文字排序; TXLSXExternalLink.Kind 是一個 TXLSXExternalLinkKind ,每條連結列出帶 TXLSXExternalDefinedName 與 Name 的 RefersTo
Custom XML partsTXLSXWorkbook.CustomXmlParts 保留項目專屬的自訂 XML: Add、 Delete與 Clear 維護這些 part,每個 TXLSXCustomXmlPart 把承載放在 Xml ,另帶一個 ItemId 與存放結構描述關聯的 SchemaRefs 字串清單(AddSchemaRef 可附加),被保留的 part 儲存時原樣往返
Cell style payloadsTXLSXCellStylePayload 是可共用、不可變的樣式組合,掛在個別儲存格上: Acquire / Release 管理參照計數, Clone 複製一份, IsDefault 測試是否為預設樣式, InternKey 識別相等的承載,讓儲存端可以把它們去重
Controls, drawings, and sparklinesTXLSXWorksheet.FormControls 是一個 TXLSXFormControls 集合,裝著 TXLSXFormControl 物件 —— 每個物件暴露 ControlType、 Caption、 MacroName、 LinkedCell與它的 Items 清單 —— 以 TXLSXFormControlType分型, TXLSXFormControlItems 保存每個控制項的項目文字;繪圖物件透過 TXLSDrawingObjectKind回報種類,走勢圖群組則以 TXLSXSparklineAxisType 與 TXLSXSparklineEmptyCells
Charts繪圖群組與數列以 TXLSXChartBarGrouping、 TXLSXChartMarkerSymbol與 TXLSXChartDataLabelPos 列舉,分類橫條分組、標記符號與資料標籤位置;圖表模型節點共用 TXLSXChartMutable 基底類別, TXLSXChartLayoutResolver.ResolveChart 會填入一個由 TXLSXChartResolvedLayout 矩形組成的 TXLSXChartLayoutRect ,涵蓋圖表、標題、圖例、繪圖區與各座標軸標題
Pagination keep blocksKeepRowsTogether / KeepColumnsTogether 維護 TXLSXKeepTogetherRange 與 TXLSXKeepTogetherCols 記錄,讓分頁規劃把一個區塊留在同一頁
DiagnosticsTXLSXWorksheet.CheckDataValidations 回傳 TXLSXValidationIssue 記錄(儲存格、驗證索引、原因); TXLSXWorkbook.ScanUnknownFunctions 回傳 TXLSXUnknownFunctionInfo 記錄,定位儲存格與定義名稱中未實作的呼叫; TXLSXCells.GetStorageStatistics 填入 TXLSXCellStorageStatistics 記錄,統計儲存格、列區塊、每種承載的位元組數與帶樣式空白格; TXLSXWorksheet.BuildRowMajorCellOrder 回傳一個 TXLSXRowMajorOrder ,描述已填儲存格在記憶體中的走訪順序
TXLSXWorkbook.FormulaLocale 讀寫剖析與序列化公式時使用的語系標籤,對應傳統活頁簿的公式語系處理

表格交叉分析篩選器

表格交叉分析篩選器(slicer,Excel 2013+)透過兩個集合寫入與檢查: TXLSXWorksheet.Slicers 保存每張工作表的篩選器檢視(TXLSXSlicer), TXLSXWorkbook.SlicerCaches 保存共用的資料來源(TXLSXSlicerCache)

property TXLSXWorksheet.Slicers: TXLSXSlicers;
property TXLSXWorkbook.SlicerCaches: TXLSXSlicerCaches;

{ TXLSXSlicers }
function Add(ATable: TXLSXTable; const AColumnName: WideString): TXLSXSlicer; overload;
function Add(ATable: TXLSXTable; const AColumnName: WideString;
  ARow1, ACol1, ARow2, ACol2: Integer): TXLSXSlicer; overload;
function IndexByName(const AName: WideString): Integer;
function FindByName(const AName: WideString): TXLSXSlicer;
procedure Delete(Index: Integer);
procedure Clear;
property Count: Integer;
property Items[Index: Integer]: TXLSXSlicer;

{ TXLSXSlicer view }
property Name: WideString;          { workbook-unique }
property CacheName: WideString;
property Cache: TXLSXSlicerCache;
property Caption: WideString;
property StartItem: Integer;
property ColumnCount: Integer;
property ColumnWidth: WideString;
property ShowCaption: Integer;
property StyleName: WideString;
property LockedPosition: Integer;
property RowHeight: WideString;
property RowHeightEmu: Integer;
procedure SetBounds(ARow1, ACol1, ARow2, ACol2: Integer);
property FromRow, FromCol, ToRow, ToCol: Integer;   { anchor cell corners }
property FromRowOff, FromColOff, ToRowOff, ToColOff: Integer; { EMU offsets }
property AnchorType: TXLSXAnchorEditAs;
property HasAnchor: Boolean;

{ TXLSXSlicers, load-path entry }
function AddInternal: TXLSXSlicer;

{ TXLSXSlicerCache }
property Name: WideString;          { e.g. Slicer_Region }
property SourceName: WideString;    { source table column / pivot field }
property IsTableCache: Boolean;
property IsPivot: Boolean;
property IsNonOlapPivot: Boolean;
property ItemCount: Integer;
property ItemCacheIndex[Index: Integer]: Integer;
property ItemSelected[Index: Integer]: Boolean;
function SetSelectedItems(const CacheItemIndices: array of Integer): Integer;
function ClearSelection: Integer;
property TableId: Integer;
property TableColumnId: Integer;
property SortOrder: WideString;     { '' | ascending | descending }
property CrossFilter: WideString;   { '' | none | showItemsWithDataAtTop | showItemsWithNoData }
property CustomListSort: Integer;   { -1 absent, else 0/1 }

{ TXLSXSlicerCaches }
function Add: TXLSXSlicerCache;
function FindByName(const AName: WideString): TXLSXSlicerCache;
function IndexOfName(const AName: WideString): Integer;
function FindForTableColumn(ATableId, ATableColumnId: Integer): TXLSXSlicerCache;
procedure Delete(Index: Integer);
procedure Clear;
property Count: Integer;
property Items[Index: Integer]: TXLSXSlicerCache;
      

Slicers.Add(Table, ColumnName) 端到端建立一個篩選器:註冊或重用名為 Slicer_<column>的後備快取、保留對應的 #N/A 定義名稱、寫入工作表的 slicerList 擴充,並用一個標記相容性的繪圖錨點固定檢視,其後備提示可涵蓋較舊的 Excel 版本;第二個多載可指定檢視矩形,否則使用表格右側的預設錨點

載入的檢視與快取在開啟時重新剖析,共用快取跨檢視重用,刪除某個快取的最後一個檢視會連快取一起丟掉;無法識別的屬性與擴充保留其原始表示,而表格繫結會追蹤儲存後的表格 id,受支援的樞紐連接則追蹤儲存後的工作表身分

受支援的匯入非 OLAP 樞紐快取透過 IsNonOlapPivot、 ItemCount、 ItemCacheIndex、 ItemSelected、 SetSelectedItems與 ClearSelection 公開具型別的成員檢查與受防護的選取變更;共用檢視行為、失敗原子性與匯入同欄位遮罩界限請見樞紐分析 Slicer 選取

不受支援的樞紐快取保留其原始位元組;從檔案載入的 Slicer 檢視,也可以透過 TXLSXDrawingObject.Slicer 當成繪圖物件存取

範例

var
  Ref: WideString;
  Row, Col: Integer;
begin
  Ref := XlsxCellRef(10, 5);
  if XlsxParseCellRef(Ref, Row, Col) then
    Worksheet.Cells.Item[Row, Col].Value := 'Checked';
end;
    

I/O 回呼、序列化器樣式集區、加密檔案驗證與工作區相依圖合約,請見活頁簿基礎結構 API