Dokumentacja HotXLS

Dodatkowe elementy API fasady XLSX

Ta strona opisuje mniejsze publiczne elementy API deklarowane przez lxHandleX, w tym opcje eksportu HTML oraz funkcje pomocnicze dla wywołujących, którzy pracują bezpośrednio z odwołaniami do komórek XLSX albo z tekstem payloadów XML

Limit pamięci tablic formuł

property FormulaArrayMemoryLimit: Int64;
      
Ogranicza payload przydzielany przez generowane tablice formuł, takie jak MUNIT; domyślnie 64 MiB, dotyczy równoległych workerów przeliczania i przycina wartości poniżej jednego elementu Double element

Opcje eksportu HTML

type
  TXLSXHtmlExportOptions = class
    constructor Create;
    property Title: WideString;
    property WriteDocument: Boolean;
    property IncludeStyles: Boolean;
    property IncludeBOM: Boolean;
    property TableClass: WideString;
  end;
      
TitleUstawia tytuł dokumentu, gdy WriteDocument jest True
WriteDocumentGdy True, zapisuje kompletny dokument HTML. Gdy False, zapisuje wyłącznie fragment tabeli
IncludeStylesSteruje tym, czy eksportowany HTML zawiera wygenerowany CSS i informacje stylów inline
IncludeBOMSteruje tym, czy wyjście do pliku i strumienia zaczyna się od BOM UTF-8
TableClassDodaje nazwę klasy CSS do generowanego elementu <table> element

Funkcje pomocnicze odwołań 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;
      
XlsxColumnLabelKonwertuje indeks kolumny (numerowany od 1) na etykietę kolumny w stylu A1, taką jak A, Zalbo AA
XlsxCellRefBuduje odwołanie do komórki w stylu A1 z numerów wiersza i kolumny numerowanych od 1
XlsxColumnIndexKonwertuje etykietę kolumny w stylu A1 na indeks kolumny numerowany od 1
XlsxParseCellRefAnalizuje pojedyncze odwołanie do komórki w stylu A1 i zwraca współrzędne wiersza i kolumny
XlsxParseRangeRefAnalizuje prostokątny zakres w stylu A1 i zwraca włączne granice numerowane od 1

Funkcje pomocnicze escapowania XML w XLSX

function XlsxEscapeText(const Value: WideString): WideString;
function XlsxEscapeAttr(const Value: WideString): WideString;
      
XlsxEscapeText escapuje zawartość węzłów tekstowych XML, a XlsxEscapeAttr escapuje wartości atrybutów XML i zachowuje białe znaki atrybutów, które Excel musi odczytać dokładnie w takiej postaci

Typy pomocnicze dla zaawansowanych elementów XLSX

Zaawansowane elementy XLSX dokumentowane w tym pliku pomocy przekazują i zwracają poniższe proste typy, zadeklarowane w 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 przyjmują TXLSXFindOptions (rozróżnianie wielkości liter, cała komórka, przeszukiwanie formuł, symbole wieloznaczne, wstecz, po kolumnach), a ReplaceText przyjmuje TXLSXReplaceEvent , którego wynik wybiera raReplace, raSkipalbo raAbort dla każdego dopasowania, z zapisywalnym ANewText dla podstawień per komórka
Progress and savingTXLSXWorkbook.OnProgress / OnProgressEx dostarczają TXLSXProgressPhase i (w formie rozszerzonej) TXLSXProgressState z flagą Abort ; RecalcBeforeSave to TXLSXRecalcMode wybierający przeliczanie ręczne, tylko przy brudnych komórkach albo zawsze przed serializacją; OnPassword to TXLSXPasswordEvent dostarczający hasła otwarcia i zapisu
Custom propertiesTXLSXWorkbook.CustomProperties to kolekcja TXLSXCustomProperties z typowanymi konstruktorami AddText / AddNumber / AddDate / AddBoolean , FindByName, Deletei Clearoraz wyliczaniem Count i Items ; każdy TXLSXCustomProperty taguje swoją wartość TXLSXCustomPropType odpowiadającym mapowaniu wariantów ECMA-376
Style overlaysTXLSXStyleOverlays zarządza nadpisaniami per zakres nałożonymi na zapisane style: Add tworzy nadpisanie, ApplyToCell restylizuje pojedynczą komórkę, Resolve, ResolveRowDefaulti ResolveColumnDefault odpowiadają na zapytania o styl podczas ładowania, HasVirtualStyle raportuje style wygenerowane, MaxVirtualRow ogranicza wirtualne wiersze, ApplyStructuralEdit przesuwa nadpisania po edycjach wierszy i kolumn, a Clear, Counti Items utrzymują kolekcję
Styles, fills, and overlaysTXLSXFill udostępnia Pattern, GradientKindi GradientStops przez TXLSXFillPattern, TXLSXGradientKindi TXLSXGradientStop; TXLSXWorksheet.StyleOverlays to kolekcja TXLSXStyleOverlays , której wpisy TXLSXStyleOverlay niosą prostokąt, dotknięte części formatu i nadpisujący styl komórki
Tables, sorts, and linksNiestandardowe style tabel (TXLSXWorkbook.CustomTableStyles) budują formatowanie sekcji ze slotów TXLSXTableStyleSectionKind : kolekcja oferuje Add, FindByName, Delete, Clear, Counti Items, a każdy TXLSXCustomTableStyle udostępnia Name, SectionSize, PivotStylei TableStyleFlag oraz odpowiada na zapytania HasSection / ResolveSection ; warunki sortowania klasyfikują klucze przez TXLSXSortBy , a porządkowanie tekstu przez TXLSXSortMethod; TXLSXExternalLink.Kind to TXLSXExternalLinkKind , a każdy link wylicza wpisy TXLSXExternalDefinedName z Name i RefersTo
Custom XML partsTXLSXWorkbook.CustomXmlParts zachowuje specyficzne dla elementów niestandardowe XML: Add, Deletei Clear utrzymują części, każdy TXLSXCustomXmlPart niesie payload w Xml plus ItemId i listę ciągów SchemaRefs relacji schematów (AddSchemaRef dopisuje), a zachowane części przechodzą zapis bez zmian
Cell style payloadsTXLSXCellStylePayload to współdzielony, niemutowalny pakiet stylów dowiązywany do pojedynczych komórek: Acquire / Release zarządzają licznikiem odwołań, Clone kopiuje, IsDefault testuje styl domyślny, a InternKey identyfikuje równe payloady, żeby magazyn mógł je deduplikować
Controls, drawings, and sparklinesTXLSXWorksheet.FormControls to kolekcja TXLSXFormControls obiektów TXLSXFormControl — każdy udostępnia ControlType, Caption, MacroName, LinkedCelli swoją listę Items — typowanych przez TXLSXFormControlType, z TXLSXFormControlItems trzymającym tekst pozycji per kontrolka; obiekty rysunku raportują swój rodzaj przez TXLSDrawingObjectKind, a grupy sparkline udostępniają skalowanie osi i zachowanie pustych komórek przez TXLSXSparklineAxisType i TXLSXSparklineEmptyCells
ChartsGrupy wykresów i serie klasyfikują grupowanie słupków, symbole znaczników i pozycje etykiet danych wyliczeniami TXLSXChartBarGrouping, TXLSXChartMarkerSymboli TXLSXChartDataLabelPos ; węzły modelu wykresu współdzielą klasę bazową TXLSXChartMutable , a TXLSXChartLayoutResolver.ResolveChart wypełnia TXLSXChartResolvedLayout z prostokątów TXLSXChartLayoutRect dla wykresu, tytułu, legendy, obszaru wykresu i tytułów osi
Pagination keep blocksKeepRowsTogether / KeepColumnsTogether na powierzchni paginacji XLSX utrzymują rekordy TXLSXKeepTogetherRange i TXLSXKeepTogetherCols , dzięki czemu planowanie podziałów stron trzyma blok na jednej stronie
DiagnosticsTXLSXWorksheet.CheckDataValidations zwraca rekordy TXLSXValidationIssue (komórka, indeks walidacji, powód); TXLSXWorkbook.ScanUnknownFunctions zwraca rekordy TXLSXUnknownFunctionInfo lokalizujące niezaimplementowane funkcje w komórkach i nazwach zdefiniowanych; TXLSXCells.GetStorageStatistics wypełnia rekord TXLSXCellStorageStatistics statystykami komórek, bloków wierszy, bajtów per payload i pustych komórek ze stylem; TXLSXWorksheet.BuildRowMajorCellOrder zwraca TXLSXRowMajorOrder opisujący kolejność przechodzenia wypełnionych komórek w pamięci
TXLSXWorkbook.FormulaLocale odczytuje albo zapisuje tag locale używany przy analizie i serializacji formuł, odwzorowując obsługę locale formuł z klasycznego skoroszytu

Table slicers

Slicery tabel (Excel 2013+) zapisuje się i inspektuje przez dwie kolekcje: TXLSXWorksheet.Slicers przechowuje widoki slicerów per arkusz (TXLSXSlicer), a TXLSXWorkbook.SlicerCaches przechowuje współdzielone źródła danych (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) buduje slicer od początku do końca: rejestruje albo ponownie używa cache zaplecza o nazwie Slicer_<column>, rezerwuje pasującą nazwę zdefiniowaną #N/A , zapisuje rozszerzenie slicerList arkusza i kotwiczy widok kotwicą rysunku zgodną ze znacznikami, której nota fallbackowa pokrywa starsze wersje Excela; drugie przeciążenie przypina prostokąt widoku, w przeciwnym razie używana jest domyślna kotwica na prawo od tabeli

Wczytane widoki i cache'y parsują się przy otwarciu, współdzielone cache'y są ponownie używane między widokami, a usunięcie ostatniego widoku cache'a usuwa cache; nierozpoznane atrybuty i rozszerzenia zachowują oryginalną reprezentację, powiązania tabel śledzą zapisane identyfikatory tabel, a obsługiwane połączenia przestawne śledzą zapisane tożsamości arkuszy

Obsługiwane zaimportowane nie-OLAP-owe cache przestawne udostępniają typowaną inspekcję składowych i chronione zmiany zaznaczenia przez IsNonOlapPivot, ItemCount, ItemCacheIndex, ItemSelected, SetSelectedItemsi ClearSelection; zobacz zaznaczanie slicerów przestawnych, aby poznać zachowanie współdzielonych widoków, atomowość porażek i granicę maski importowanego tego samego pola

Nieobsługiwane cache przestawne zachowują swoje oryginalne bajty; wczytany widok slicera jest też dostępny jako obiekt rysunku przez TXLSXDrawingObject.Slicer

Przykład

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;
    

Zobacz infrastrukturę API skoroszytu, aby poznać callbacki We/Wy, pule stylów serializatora, weryfikację plików zaszyfrowanych i kontrakty grafu zależności przestrzeni roboczej