Documentazione HotXLS

Membri API aggiuntivi della facade XLSX

Questa pagina copre i membri API pubblici minori dichiarati da lxHandleX, incluse le opzioni di esportazione HTML e le funzioni helper per i chiamanti che lavorano direttamente con i riferimenti di cella XLSX o con il testo dei payload XML

Limite di memoria degli array di formula

property FormulaArrayMemoryLimit: Int64;
      
Limita il payload allocato dagli array di formula generati come MUNIT, è 64 MiB per default, si applica ai worker di ricalcolo parallelo e limita i valori sotto un elemento Double

Opzioni di esportazione HTML

type
  TXLSXHtmlExportOptions = class
    constructor Create;
    property Title: WideString;
    property WriteDocument: Boolean;
    property IncludeStyles: Boolean;
    property IncludeBOM: Boolean;
    property TableClass: WideString;
  end;
      
Title Imposta il titolo del documento quando WriteDocument è True
WriteDocument Quando è True, scrive un documento HTML completo. Quando è False, scrive solo il frammento della tabella
IncludeStyles Controlla se l'HTML esportato include il CSS generato e le informazioni di stile inline
IncludeBOM Controlla se l'output del file e dello stream inizia con un BOM UTF-8
TableClass Aggiunge un nome di classe CSS all'elemento <table> generato

Funzioni helper di riferimento 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 Converte un indice di colonna a base 1 in un'etichetta di colonna in stile A1 come A, Z o AA
XlsxCellRef Costruisce un riferimento di cella in stile A1 da numeri di riga e colonna a base 1
XlsxColumnIndex Converte un'etichetta di colonna in stile A1 in un indice di colonna a base 1
XlsxParseCellRef Analizza un singolo riferimento di cella in stile A1 e restituisce le coordinate di riga e colonna
XlsxParseRangeRef Analizza un intervallo rettangolare in stile A1 e restituisce i limiti inclusivi a base 1

Funzioni helper di escape XML XLSX

function XlsxEscapeText(const Value: WideString): WideString;
function XlsxEscapeAttr(const Value: WideString): WideString;
      
XlsxEscapeText esegue l'escape del contenuto dei nodi di testo XML, mentre XlsxEscapeAttr esegue l'escape dei valori degli attributi XML e preserva gli spazi degli attributi che Excel deve rileggere esattamente

Tipi di supporto per i membri XLSX avanzati

I membri XLSX avanzati documentati in questo file della guida passano e restituiscono i seguenti tipi semplici, dichiarati in 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 accettano TXLSXFindOptions (maiuscole/minuscole, cella intera, ricerca nelle formule, caratteri jolly, all'indietro, per colonne) e ReplaceText riceve una TXLSXReplaceEvent il cui risultato seleziona raReplace, raSkip o raAbort per ogni corrispondenza, con un ANewText scrivibile per le sostituzioni per singola cella
Progress and savingTXLSXWorkbook.OnProgress / OnProgressEx consegnano TXLSXProgressPhase e (nella forma estesa) TXLSXProgressState con un flag Abort; RecalcBeforeSave è una TXLSXRecalcMode che seleziona il ricalcolo manuale, dei soli dati modificati o sempre prima della serializzazione; OnPassword è una TXLSXPasswordEvent che fornisce le password di apertura e di scrittura
Custom propertiesTXLSXWorkbook.CustomProperties è una raccolta TXLSXCustomProperties con creatori tipizzati AddText / AddNumber / AddDate / AddBoolean, FindByName, Delete e Clear, più l'enumerazione Count e Items; ogni TXLSXCustomProperty contrassegna il proprio valore con un TXLSXCustomPropType corrispondente alla mappatura delle varianti ECMA-376
Style overlaysTXLSXStyleOverlays gestisce le override per intervallo sopra gli stili memorizzati: Add ne crea una, ApplyToCell restilisce una singola cella, Resolve, ResolveRowDefault e ResolveColumnDefault rispondono alle richieste di stile durante il caricamento, HasVirtualStyle segnala gli stili generati, MaxVirtualRow limita le righe virtuali, ApplyStructuralEdit sposta gli overlay dopo modifiche di righe o colonne, e Clear, Count e Items gestiscono la raccolta
Styles, fills, and overlaysTXLSXFill espone Pattern, GradientKind e GradientStops tramite TXLSXFillPattern, TXLSXGradientKind e TXLSXGradientStop; TXLSXWorksheet.StyleOverlays è una raccolta TXLSXStyleOverlays le cui voci TXLSXStyleOverlay trasportano un rettangolo, le parti di formato interessate e lo stile di cella di override
Tables, sorts, and linksGli stili tabella personalizzati (TXLSXWorkbook.CustomTableStyles) costruiscono la formattazione delle sezioni dagli slot TXLSXTableStyleSectionKind: la raccolta offre Add, FindByName, Delete, Clear, Count e Items, mentre ogni TXLSXCustomTableStyle espone Name, SectionSize, PivotStyle e TableStyleFlag e risponde alle richieste HasSection / ResolveSection; le condizioni di ordinamento classificano le chiavi con TXLSXSortBy e l'ordinamento del testo con TXLSXSortMethod; TXLSXExternalLink.Kind è un TXLSXExternalLinkKind e ogni collegamento elenca voci TXLSXExternalDefinedName con Name e RefersTo
Custom XML partsTXLSXWorkbook.CustomXmlParts preserva il XML personalizzato specifico dell'elemento: Add, Delete e Clear gestiscono le parti, ogni TXLSXCustomXmlPart trasporta il proprio payload in Xml più un ItemId e una lista di stringhe SchemaRefs delle relazioni di schema (AddSchemaRef accoda), e le parti preservate sopravvivono intatte ai salvataggi
Cell style payloadsTXLSXCellStylePayload è un bundle di stile immutabile e condivisibile collegato alle singole celle: Acquire / Release gestiscono il conteggio dei riferimenti, Clone lo copia, IsDefault verifica lo stile predefinito e InternKey identifica i payload uguali così lo storage può deduplicarli
Controls, drawings, and sparklinesTXLSXWorksheet.FormControls è una raccolta TXLSXFormControls di oggetti TXLSXFormControl — ciascuno espone ControlType, Caption, MacroName, LinkedCell e la propria lista Items — tipizzati da TXLSXFormControlType, con TXLSXFormControlItems che contiene il testo delle voci per controllo; gli oggetti di disegno riportano il proprio tipo tramite TXLSDrawingObjectKind, e i gruppi sparkline espongono la scalatura degli assi e il comportamento delle celle vuote tramite TXLSXSparklineAxisType e TXLSXSparklineEmptyCells
ChartsI gruppi di tracciamento e le serie classificano raggruppamento a barre, simboli dei marcatori e posizioni delle etichette dati con gli enum TXLSXChartBarGrouping, TXLSXChartMarkerSymbol e TXLSXChartDataLabelPos; i nodi del modello del grafico condividono la classe base TXLSXChartMutable, e TXLSXChartLayoutResolver.ResolveChart riempie una TXLSXChartResolvedLayout di rettangoli TXLSXChartLayoutRect per grafico, titolo, legenda, area grafico e titoli degli assi
Pagination keep blocksKeepRowsTogether / KeepColumnsTogether sulla superficie di impaginazione XLSX mantengono i record TXLSXKeepTogetherRange e TXLSXKeepTogetherCols così la pianificazione delle interruzioni di pagina tiene un blocco su una sola pagina
DiagnosticsTXLSXWorksheet.CheckDataValidations restituisce record TXLSXValidationIssue (cella, indice di convalida, motivo); TXLSXWorkbook.ScanUnknownFunctions restituisce record TXLSXUnknownFunctionInfo che localizzano le chiamate non implementate nelle celle e nei nomi definiti; TXLSXCells.GetStorageStatistics riempie un record TXLSXCellStorageStatistics con conteggi di celle, blocchi di riga, byte per payload e celle vuote con stile; TXLSXWorksheet.BuildRowMajorCellOrder restituisce un TXLSXRowMajorOrder che descrive l'ordine di attraversamento in memoria delle celle popolate
TXLSXWorkbook.FormulaLocale legge o scrive il tag di locale usato durante l'analisi e la serializzazione delle formule, rispecchiando la gestione del locale delle formule della cartella di lavoro classica

Slicer di tabella

I slicer di tabella (Excel 2013+) vengono scritti e ispezionati tramite due raccolte: TXLSXWorksheet.Slicers contiene le viste slicer per foglio (TXLSXSlicer) e TXLSXWorkbook.SlicerCaches contiene le sorgenti dati condivise (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) costruisce uno slicer end-to-end: registra o riusa la cache di supporto denominata Slicer_<column>, riserva il nome definito #N/A corrispondente, scrive l'estensione slicerList del foglio di lavoro e ancora la vista con un ancoraggio di disegno markup-compatibility la cui nota di fallback copre le versioni precedenti di Excel; il secondo overload fissa il rettangolo della vista, altrimenti viene usato un ancoraggio predefinito a destra della tabella

Le viste e le cache caricate vengono rianalizzate all'apertura, le cache condivise vengono riusate tra le viste, e l'eliminazione dell'ultima vista di una cache elimina la cache; attributi ed estensioni non riconosciuti conservano la loro rappresentazione originale, mentre i binding di tabella tengono traccia degli id delle tabelle salvate e le connessioni Pivot supportate tengono traccia delle identità dei fogli salvate

Le cache pivot non OLAP importate supportate espongono ispezione tipizzata dei membri e cambi di selezione protetti tramite IsNonOlapPivot, ItemCount, ItemCacheIndex, ItemSelected, SetSelectedItems e ClearSelection; vedi selezione Slicer pivot per il comportamento delle viste condivise, l'atomicità dei fallimenti e il confine della maschera same-field importata

Le cache Pivot non supportate conservano i loro byte originali; una vista Slicer caricata da file è raggiungibile anche come oggetto di disegno tramite TXLSXDrawingObject.Slicer

Esempio

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;
    

Vedi API dell'infrastruttura del workbook per callback di I/O, pool di stili del serializer, verifica dei file crittografati e contratti del grafo delle dipendenze del workspace