Dokumentacja HotXLS

Interfejs API bezpośredniego czytnika i zapisywania

TXLSDirectReader i TXLSDirectWriter przetwarzają pakiety XLSX bez utrzymywania kompletnej siatki arkusza w pamięci, dlatego wywołania API opisujące arkusz muszą być wykonywane przed odpowiednią fazą strumieniowania lub w jej trakcie

Cykl życia zapisywania i wartości komórek

TXLSDirectWriter.BeginFile lub BeginStream rozpoczyna pakiet, metody arkusza definiują po jednym arkuszu, a Finish zatwierdza końcowy pakiet

Scalar cellsWriteString, WriteRichString, WriteNumber, WriteBoolean, WriteDateTimei WriteError
Formula cellsWriteFormula, WriteFormulaNumber, WriteFormulaString, WriteFormulaBoolean, WriteFormulaDateTimei WriteFormulaError przyjmują wyniki w pamięci podręcznej dostarczone przez wywołującego
Shared stringsUseSharedStrings włącza deduplikację ciągów na poziomie pakietu
StatisticsCellCount raportuje liczbę wyemitowanych komórek
PanesFreezePanes(ColSplit, RowSplit) zapisuje podział zablokowany w podanej kolumnie i wierszu (numerowanych od 1)

Wiersze i kolumny są jednobazowe w publicznej powierzchni zapisywania i muszą być dostarczane w kolejności arkusza do przodu

Cykl życia łatki arkusza

BeginPatch podmienia jeden arkusz lub wstawia nowy arkusz, zachowując nietknięte części pakietu. Nieudana inicjalizacja natychmiast zwalnia archiwum źródłowe i strumień źródłowy — także przy brakującym arkuszu, brakującej wymaganej części pakietu, nieprawidłowym archiwum albo porażce utworzenia celu. Pliki źródłowe i tymczasowe rejestracje należące do wywołującego pozostają jego odpowiedzialnością; zwolnione uchwyty pozwalają te źródła usunąć albo zwolnić

Close i zniszczenie zwalniają uchwyty źródeł nawet wtedy, gdy nie ma aktywnego celu albo finalizacja łatki zgłosi wyjątek. Nieudana podmiana celu zachowuje swoją wystawioną zawartość do wglądu, a pisarz po nieudanej inicjalizacji może rozpocząć kolejną łatkę lub zwykłą operację plikową

Style wielokrotnego użytku

AddCellStyle rejestruje niezmienny uchwyt stylu na poziomie pakietu, a CloneCellStyle tworzy nowy uchwyt bez przechowywania wierszy arkusza

Nazwy zdefiniowane i hiperłącza

AddDefinedName, AddLocalDefinedName, AddDefinedRangei AddLocalDefinedRange dodają nazwy skoroszytu lub arkusza przed finalizacją pakietu

AddHyperlink, AddHyperlinkRange, AddInternalHyperlinki AddInternalHyperlinkRange emitują zewnętrzne relacje lub wewnętrzne lokalizacje arkusza dla jednej komórki lub zakresu

Walidacja danych

AddDataValidation i AddDataValidationSqRef udostępniają pełną powierzchnię reguł, natomiast AddListValidation, AddWholeNumberValidation, AddDecimalValidation, AddDateValidation, AddTimeValidation, AddTextLengthValidationi AddCustomValidation zapewniają wpisane pomocniki

Formatowanie warunkowe

AddConditionalFormat, AddConditionalFormatExpression, AddConditionalFormatContainsText, AddConditionalFormatNotContainsText, AddConditionalFormatBeginsWith, AddConditionalFormatEndsWith, AddConditionalFormatTop10, AddConditionalFormatAboveAverage, AddConditionalFormatDuplicateValues, AddConditionalFormatUniqueValues, AddConditionalFormatContainsBlanks, AddConditionalFormatNotContainsBlanks, AddConditionalFormatContainsErrorsi AddConditionalFormatNotContainsErrors dodają reguły skalarne

AddConditionalFormatDataBar, AddConditionalFormatColorScale2, AddConditionalFormatColorScale3i AddConditionalFormatIconSet dodają reguły wizualne; ClearConditionalFormats usuwa oczekujące reguły dla bieżącego arkusza

Autofiltr i tabele

AddAutoFilterValue, AddAutoFilterDateGroupi AddAutoFilterSortCondition konfigurują filtr arkusza

AddTable tworzy część tabeli, a AddTableFilterValue, AddTableFilterDateGroupi AddTableSortCondition konfigurują jej stan filtru i sortowania

Ochrona i podziały stron

ProtectSheet, UnprotectSheet, AddProtectedRangei ClearProtectedRanges konfigurują ochronę arkusza; ProtectWorkbook i UnprotectWorkbook konfigurują blokady struktury i okien skoroszytu

AddHorizontalPageBreak i AddVerticalPageBreak emitują ręczne podziały stron dla bieżącego arkusza

Diagnostyka pamięci bezpośredniego czytnika

TXLSDirectReader.SharedStringMemoryLimit ogranicza pamięć zdekodowanych współdzielonych ciągów, SharedStringsOnDisk raportuje migrację do tymczasowej pamięci indeksowanej, SharedStringCount raportuje liczbę załadowanych wpisów, a ParallelDiag udostępnia ograniczoną diagnostykę równoległego analizatora

Projekcja czytnika i stan formuł

FirstRow, LastRow, IncludeColumni ClearColumnProjection przekazują wybór wierszy oraz kolumn (numerowanych od 1) do analizatora arkusza jeszcze przed alokacją wartości, formuł czy tekstu sformatowanego

IncludeFormulaText ma domyślnie wartość true; jego wyłączenie zachowuje wartości z pamięci podręcznej, współrzędne, style i HasFormula , podczas gdy FormulaTextAvailable przyjmuje false, a Formula pozostaje puste

Kursor wierszy

TXLSRowCursor.Open przyjmuje pliki lub strumienie XLS, XLSX, XLSM, ODS, CSV i TSV; autodetekcja ZIP odróżnia pakiety ODS od skoroszytów Open XML, zanim zostanie otwarty arkusz

SelectSheet i SelectSheetByName wybierają arkusz; SheetCount, SheetNames, SheetIndex, RowIndexi Eof udostępniają stan przechodzenia, a SharedStringMemoryLimit stosuje tę samą ograniczoną politykę współdzielonych ciągów co bezpośredni czytnik

FirstRow, LastRow, IncludeColumni ClearColumnProjection stosują te same jednobazowe filtry we wszystkich formatach kursora; opcje przekazane przy otwarciu nie mogą się zmienić między FindFirst a EOF, ale stają się znowu modyfikowalne po EOF, wyborze arkusza lub zamknięciu

Każdy TXLSRowCursorCell raportuje HasFormula niezależnie od FormulaTextAvailable; klasyczny XLS ujawnia obecność formuły i wyniki z pamięci podręcznej bez rozdawania niedostępnego tekstu tokenów, a IncludeFormulaText może wytłumić tekst formuł XLSX i ODS przed akumulacją

Przechodzenie ODS trzyma jeden fizyczny szablon wiersza, przycina powtarzane bloki wierszy do żądanego przedziału, przeskakuje bezpośrednio między wybranymi kolumnami wewnątrz powtarzanych obszarów, przechodzi przez pokryte komórki bez zwracania ich jako wartości i raportuje nieprawidłowe lub ograniczone siatką liczby powtórzeń przez OnSkippedRecord

State rozróżnia xrcsClosed, xrcsBeforeFirst, xrcsActive, xrcsEof, xrcsCancelledi xrcsFaulted; Cancel jest idempotentny, unieważnia bieżący wiersz i zwalnia strumień aktywnego arkusza, zachowując źródło, dzięki czemu jawny wybór arkusza może rozpocząć nowy przebieg

Przeciążenie strumieniowe domyślnie przyjmuje xsoBorrowed, przywraca początkową pozycję wywołującego przy zamknięciu i akceptuje xsoOwned , aby przekazać własność po udanym otwarciu; nieudane otwarcia nigdy nie konsumują własności wywołującego

CurrentRowView pożycza tablicę bieżącego wiersza bez kopiowania i sprawdza generację przy każdym dostępie; przejście dalej, wybór arkusza, anulowanie, zamknięcie lub zniszczenie kursora unieważnia widok i przy późniejszym dostępie zgłasza EXLSRowCursorViewInvalidated on later access

PeakRowBufferedBytes to monotoniczne oszacowanie od ostatniego Open — ilości rekordów komórek, zarządzanych payloadów, tekstu sformatowanego i danych zaplecza formatów utrzymywanych dla jednego logicznego wiersza; służy diagnostyce regresji ograniczonej pamięci, a nie dokładnej księgowości sterty

SheetPassesStarted liczy udane starty zaplecza arkusza; podejrzenie nazw arkuszy albo pominięcie arkusza przez fasadę callbacków nie otwiera części arkusza

Adapter callbacków Forward

TXLSForwardReader deleguje dekodowanie XLS, XLSX, ODS, CSV i TSV do TXLSRowCursor, zamienia każdą komórkę bieżącego wiersza na callback OnCell i zachowuje te same kontrakty granic wierszy, projekcji kolumn, stanu formuł, tekstu sformatowanego, haseł, pominiętych rekordów, pozycji strumienia i ograniczonego bufora

PeakRowBufferedBytes i SheetPassesStarted udostępniają współdzieloną diagnostykę kursora na powierzchni callbacków, przy czym klasyczny XLS dodatkowo utrzymuje ClassicBytesRead i ClassicPeakBufferedBytes

Zdarzenia czytnika i typy rekordów

Czytnik i kursor wierszy udostępniają opcjonalne callbacki oraz proste rekordy, wszystkie zadeklarowane w lxDirectRead. Każdy callback ma ten sam kształt: rekord opisuje jeden element strumienia, a ustawienie Abort zatrzymuje skanowanie (zdarzenia arkuszy przyjmują dodatkowo SkipSheet)

CellsOnCell (typ TXLSDirectCellEvent) dostarcza po jednym TXLSDirectCell na komórkę, której Kind (TXLSDirectCellKind: xdkEmpty, xdkNumber, xdkString, xdkBoolean, xdkDate, xdkError) wybiera wypełnione pole wartości; tekst sformatowany podróżuje jako TXLSDirectRichText trzymający wpisy TXLSDirectRichTextRun , każdy z TXLSDirectRichColor (typ TXLSDirectRichColorKind), TXLSDirectRichUnderlinei TXLSDirectRichVertAlign, plus opcjonalnymi danymi TXLSDirectPhoneticProperties i TXLSDirectPhoneticRun data
Sheet framingOnSheet (TXLSDirectSheetEvent) może pominąć cały arkusz przed analizą jego komórek; OnSkippedRecord (TXLSDirectSkippedEvent) raportuje zniekształconą lub uciętą zawartość z identyfikatorem rekordu i powodem
Sheet layoutOnDimension, OnSheetFormat, OnColumn, OnRow, OnMergei OnPane dostarczają rekordy TXLSDirectDimension, TXLSDirectSheetFormat, TXLSDirectColumn, TXLSDirectRow, TXLSDirectMergei TXLSDirectPane ; stan paneli używa TXLSDirectPaneState (xdpsSplit, xdpsFrozen, xdpsFrozenSplit, xdpsUnknown)
Cursor stateTXLSRowCursor.State to TXLSRowCursorState (xrcsClosed, xrcsBeforeFirst, xrcsActive, xrcsEof, xrcsCancelled, xrcsFaulted); przeciążenie strumieniowe Open przyjmuje TXLSStreamOwnership (domyślniexsoBorrowed , xsoOwned przekazuje własność), a CurrentRowView zwraca pożyczony widok IXLSRowCursorView , którego właściwość Valid strzeże dostępu, a ValueByCol czyta jedną komórkę pożyczonego wiersza bez kopiowania; widok unieważnia się, gdy kursor przechodzi dalej

Typy parametrów i stylów writera

Typowane pomocniki writera (lxDirectWrite) przyjmują rekordy i wyliczenia, więc wywołania pozostają bez alokacji: WriteRichString przyjmuje TXLSDirectRichText; AddCellStyle buduje styl na poziomie pakietu z TXLSDirectCellStyle , którego wyrównanie (TXLSDirectHorizontalAlignment, TXLSDirectVerticalAlignment), podkreślenie (TXLSDirectUnderline), deseń wypełnienia (TXLSDirectFillPattern) i boki obramowania (TXLSDirectStyleBorder z TXLSDirectBorderSide) odzwierciedlają model stylów OOXML. Formatowanie warunkowe przekazuje TXLSDirectConditionalFormat z TXLSDirectCfKind / TXLSDirectCfOperator / TXLSDirectCfValue / TXLSDirectCfValueKind i TXLSDirectIconSetType, walidacja danych — TXLSDirectDataValidation, tabele — TXLSDirectTable, hiperłącza — TXLSDirectHyperlink, nazwy zdefiniowane — TXLSDirectDefinedName, style różnicowe — TXLSDirectDxfStyle, komentarze — TXLSDirectComment, obrazy — TXLSDirectImage z TXLSDirectImageFormat, wykresy — TXLSDirectChart z TXLSDirectChartSeries i TXLSDirectChartType, scalenia — TXLSDirectMergeRange, chronione zakresy — TXLSDirectProtectedRange, ochrona arkusza — zestaw TXLSDirectSheetProtectionOptions z TXLSDirectSheetProtectionOption, stan sortowania autofiltra — TXLSDirectSortState, opcje kolumn — TXLSDirectColumnOption, a geometria strony — rekord TXLSDirectPageMargins record

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 pobiera wiersze z aplikacji: dostawca zapisuje komórki wiersza wprost przez writer i zostawia Eof = Falsealbo deklaruje wyczerpanie danych przez Eof = True , przerywając pętlę. Pomocniki konwertują między współrzędnymi i pierwotnymi wartościami ochrony: XLSDirectColName renderuje kolumnę numerowaną od zera jako litery A1, XLSDirectParseRef analizuje odwołanie do komórki A1, a XLSDirectPasswordHash oblicza starszy hasz hasła, który zapisują rekordy ochrony arkusza

Zobacz także