Dokumentacja HotXLS

API infrastruktury skoroszytu

Te publiczne składniki wspierają integracje, które badają I/O, implementują serializatory albo koordynują obliczenia między skoroszytami, ze składnikami skoroszytu zadeklarowanymi w lxHandleX i grafem przestrzeni roboczej zadeklarowanym w lxDepGraph

Zwykłe aplikacje powinny najpierw korzystać z formatowania komórek, SaveAs, Recalculate i API przestrzeni roboczej skoroszytów zewnętrznych; rejestracja w puli stylów i szeregowanie grafu wymagają tych samych konwencji indeksów i czasu życia co serializatory i silnik obliczeń biblioteki

Obserwacja I/O i odtwarzanie

TXLSXWorkbook.OnReadCell otrzymuje indeks arkusza, wiersz, kolumnę, zapisaną wartość i formułę dla każdej materializowanej komórki podczas parsowania XLSX, z zapisywalną flagą Cancel; TXLSXWorkbook.OnWriteCell otrzymuje zapisywalną wartość wyjścia plus flagi Skip i Cancel przed serializacją komórki, więc host potrafi przekształcić albo pominąć wyjście bez zastępowania API skoroszytu bezpośrednim API strumienia

Oba callbacki korzystają ze współrzędnych arkusza i komórek numerowanych od 1, a ich zadeklarowane typy to TXLSXCellReadEvent i TXLSXCellWriteEvent; callbacki wykonują się wewnątrz aktywnej operacji I/O, więc unikaj rozpoczynania kolejnej operacji na tym samym skoroszycie z callbacka

TXLSXWorkbook.RecoveryMode domyślnie ma wartość False i pozwala, by obsługiwane błędy parsowania XML arkuszy stawały się ostrzegawczymi wpisami diagnostycznymi przy kontynuowanym otwarciu, potencjalnie zostawiając tylko częściowo odtworzoną treść arkuszy; nie gwarantuje odtworzenia z nieczytelnego pakietu ZIP, więc badaj diagnostykę i odtworzone dane przed zapisem

TXLSXWorkbook.FireProgress rozsyła fazę, stan, bieżącą liczbę i liczbę całkowitą do przypisanych handlerów postępu, przy czym starszy handler otrzymuje powiadomienia o pracy, a rozszerzony wszystkie stany; rozszerzony handler może zażądać anulowania, z wyjątkiem tego, że powiadomienie o końcu zapisu nie potrafi cofnąć już zatwierdzonego wyjścia

TXLSXWorkbook.AddDiagnostic dołącza i zwraca wpis diagnostyczny należący do skoroszytu, rejestruje podany kod, ważność, operację, komunikat, kod natywny, kontekst arkusza i nazwę części pakietu, kopiuje nazwę klasy wyjątku, gdy wyjątek jest podany, i wywołuje OnDiagnostic; nie przejmuje własności wyjątku ani go nie podnosi

function TXLSXWorkbook.AddDiagnostic(ACode: Integer;
  ASeverity: TXLSDiagnosticSeverity; AOperation: TXLSDiagnosticOperation;
  const AMessage: WideString; ANativeCode, ASheetIndex: Integer;
  const ASheetName, APartName: WideString;
  AException: Exception): TXLSDiagnostic;

Polityki wyjścia i inspekcja zapisanego pakietu

TXLSXWorkbook.CSVEmitFormulas domyślnie ma wartość False i przełącza wyjście CSV z wyników formuł na tekst formuł dla komórek z formułami; wyjście wyników próbuje ewaluacji formuły i cofa się do zapisanego tekstu komórki albo wartości, gdy ewaluacja zawiedzie; TXLSXWorkbook.CSVQuoteAllStrings też domyślnie ma wartość False i wymusza cudzysłowy wokół pól tekstowych, podczas gdy liczby, daty, Boolean, Null i Empty zachowują normalne reguły cytowania

TXLSXWorkbook.LastSaveUsedStreaming raportuje, czy ostatni przygotowany zapis korzystał ze strumieniowania arkuszy, podczas gdy TXLSXWorkbook.LastSavePeakRowXmlChars raportuje największy buforowany fragment XML wiersza, TXLSXWorkbook.LastSaveBufferedWorksheetXmlChars raportuje łącznie buforowany XML arkuszy, a TXLSXWorkbook.LastSavePeakAuxiliaryXmlChars raportuje największy śledzony pomocniczy fragment XML; to zliczenia znaków z instrumentacji serializatora, a nie pomiary całkowitej pamięci procesu, i wyjście ODS nie korzysta ze ścieżki strumieniowania arkuszy XLSX

TXLSXWorkbook.TryCopyPreservedPart próbuje skopiować kwalifikowalną zachowaną część źródłową, łącznie z jej reprezentacją skompresowaną, do dostarczonego przez wywołującego docelowego TZipArchive, zwracając True przy skopiowaniu albo False, gdy wymagana jest normalna serializacja; źródło musi pozostać dostępne z otwarcia opartego na pliku, a brakujące albo jawnie odrzucone części nie dają się skopiować

Wywołujący posiada archiwum docelowe i musi je normalnie zakończyć; błąd wycofania kopiowania skompresowanego nadal potrafi podnieść wyjątek, a ten pomocnik ani nie konstruuje kompletnego pakietu skoroszytu, ani nie aktualizuje jego relacji i typów treści

Szyfrowanie i metadane skoroszytu

TXLSXWorkbook.SaveAsEncryptedAgile przyjmuje nazwę pliku i niepuste hasło, serializuje pakiet XLSX w pamięci i zapisuje kontener Agile encrypted, zwracając 1 po sukcesie albo -1 przy zraportowanym błędzie; opcjonalne VerifyEncryptedSave wykonuje sprawdzenie ponownego otwarcia po zapisie, a metoda wymaga pamięci dla pakietu niezaszyfrowanego, jak i jego zserializowanych bajtów

TXLSXWorkbook.VerifyEncryptedFile otwiera podany plik i hasło w tymczasowym skoroszycie i zwraca True tylko wtedy, gdy to otwarcie się uda, konwertując wyjątki na False; sprawdza czytelność, a nie porównuje każdą komórkę z bieżącym skoroszytem i podąża za normalnym zachowaniem OpenEncrypted dla niezaszyfrowanego wejścia XLSX

TXLSXWorkbook.DocSecurity przechowuje rozszerzone pole bitowe właściwości dokumentu: 1 oznacza ochronę hasłem, 2 zalecenie tylko do odczytu, 4 wymuszony status tylko do odczytu, a 8 blokadę adnotacji; te bity metadanych same nie aplikują szyfrowania ani restrykcji dostępu

TXLSXWorkbook.DocPropsTouched to flaga tylko do odczytu, której pisarze właściwości dokumentu używają, by decydować, czy śledzone właściwości zostały skonfigurowane; ustawiają ją setterzy śledzonych właściwości, jak Title, podczas gdy bezpośrednio przypisane rozszerzone metadane nie ustawiają jej automatycznie

TXLSXWorkbook.WorkbookProtectHash ujawnia wczytany albo wygenerowany starszy hash ochrony skoroszytu, normalnie cztery cyfry szesnastkowe albo pusty ciąg, gdy hash hasła nie istnieje; używaj metod ochrony skoroszytu do zmiany ochrony zamiast przypisywać tę wartość tylko do odczytu i trzymaj ochronę struktury skoroszytu osobno od zaszyfrowanego zapisu pliku

TXLSXWorkbook.ThemeMajorFont i TXLSXWorkbook.ThemeMinorFont ujawniają kroje nagłówka i treści wczytane z motywu i nadpisują nazwy przy generowaniu domyślnego motywu Office; dosłownie zachowany motyw ma pierwszeństwo przed tymi ustawieniami nazw fontów

Style tabel i pule stylów serializatora

TXLSXWorkbook.DefaultTableStyleName i TXLSXWorkbook.DefaultPivotStyleName przechodzą roundtrip z domyślnymi nazwami zapisanymi w tabeli stylów dla nowo wstawianych tabel Excel i tabel przestawnych; ich przypisanie nie formatuje od razu ponownie każdego istniejącego obiektu

TXLSXWorkbook.ResolveTableStyle zwraca należący do skoroszytu styl niestandardowy po nazwie, w przeciwnym razie rozwiązuje i cache'uje obsługiwane wbudowane TableStyleLight1 do TableStyleLight21, TableStyleMedium1 do TableStyleMedium28 albo TableStyleDark1 do TableStyleDark11 i zwraca nil dla nieznanej nazwy; nie zwalniaj zwróconego stylu

TXLSXWorkbook.FastStyleAppend domyślnie ma wartość False i pozwala masowemu tworzeniu pominąć skany deduplikacji w pulach stylów i zwykłą rejestrację stylów złożonych, wymieniając większą tabelę stylów na szybsze wstawianie przy tworzeniu wielu odrębnych stylów

function TXLSXWorkbook.RegisterCompositeXf(
  AFont, AFill, ABorder, ANumFmt, AAlign, AProt: Integer): Integer; overload;
function TXLSXWorkbook.RegisterCompositeXf(
  AFont, AFill, ABorder, ANumFmt, AAlign, AProt,
  ABuiltinNumFmt: Integer): Integer; overload;
function TXLSXWorkbook.RegisterLinkedCompositeXf(
  AFont, AFill, ABorder, ANumFmt, AAlign, AProt,
  AParentXfId: Integer; ALinkedParts: TXLSXFormatParts): Integer;

TXLSXWorkbook.RegisterCompositeXf rejestruje połączone indeksy fontu, wypełnienia, obramowania, formatu liczby, wyrównania i ochrony oraz zwraca absolutny indeks cellXfs, a nie slot puli złożonej; przeciążenie siedmioargumentowe przyjmuje wbudowany identyfikator formatu liczby, który ma pierwszeństwo przed podanym indeksem formatu niestandardowego, przy czym zero oznacza brak nadpisania

TXLSXWorkbook.RegisterLinkedCompositeXf dodatkowo rejestruje identyfikator nadrzędnego style-XF i części formatu powiązane z tym rodzicem, zachowując odrębne wpisy dla różnych kombinacji rodzica albo powiązania; też zwraca absolutny indeks cellXfs

TXLSXWorkbook.CompositeXfBase zwraca pierwszy absolutny indeks złożony, wyliczony z bieżących jednowymiarowych pul stylów, podczas gdy TXLSXWorkbook.CompositeXfCount liczy zarejestrowane wpisy złożone; slot puli używany przez GetCompositeXf to indeks absolutny minus baza, a baza potrafi się zmienić, gdy te pule rosną, więc te wartości należą do bieżącego stanu serializacji

TXLSXWorkbook.RegisterCondDxf rejestruje pożyczone odwołanie TXLSDxfStyle i zwraca jego numerowany od zera identyfikator stylu różnicowego, ponownie używając istniejącego identyfikatora dla tego samego odwołania obiektu; trzymaj obiekt przy życiu, dopóki serializacja z niego korzysta

TXLSXWorkbook.ResetCondDxfs czyści liczbę aktywnego rejestru bez zwalniania pożyczonych stylów, a TXLSXWorkbook.CondDxfCount raportuje tę liczbę; przygotowanie zapisu przebudowuje ten rejestr, więc nie utrwalaj tych identyfikatorów niezależnie od zapisywanego pakietu

TXLSXWorkbook.PivotCaches to należąca do skoroszytu kolekcja TXLSPivotCaches współdzielona przez tabele przestawne arkuszy; AddPivotTable ponownie używa pasującej pamięci podręcznej źródła albo tworzy jedną, a RefreshPivotCache odświeża wskazaną pamięć podręczną, zachowując obsługiwane tożsamości elementów

Integracja obliczeń

TXLSXWorkbook.RecalcThreads domyślnie ma wartość zero, przy czym zero albo jeden oznacza seryjne przeliczanie, a większe wartości włączają ewaluację pracowników dla niezależnych frontów formuł; skoroszyty z tablicami dynamicznymi korzystają z przebiegu seryjnego niezależnie od tego ustawienia, węzły tabel danych what-if pozostają seryjne, a handlery funkcji użytkownika używane przez pracowników muszą być bezpieczne wątkowo

TXLSXWorkbook.SolveCycleIteratively to zaawansowany punkt wejścia normalnie wywoływany przez Recalculate, gdy iteracja jest włączona, konsumujący indeksy węzłów z bieżącego grafu zależności tego skoroszytu i ewaluujący węzły cykli w podanym TList; indeksy z grafu przestrzeni roboczej albo innego skoroszytu nie są wymienne

Solver korzysta z IterateCount i IterateDelta, zachowuje wartości końcowe nawet po osiągnięciu limitu iteracji i zwraca lxOk bez poświadczania zbieżności; członkowie cykli tablic dynamicznych zwracają lxErrorCircumRef, a argument CycleCount sygnatury nie zastępuje klasyfikacji cykli na węzłach grafu

Budowa grafu zależności przestrzeni roboczej

TXLSWorkspaceDepGraph przechowuje zależności formuł w poprzek dostarczonych przez wywołującego tożsamości skoroszytów i tożsamości arkuszy bez otwierania skoroszytów i ewaluowania formuł; zbuduj graf z bieżących formuł i rozwiązanych odwołań, po czym przebuduj go po zmianach strukturalnych albo formuł, które unieważniają te odwołania

function TXLSWorkspaceDepGraph.AddNode(
  const AWorkbookIdentity, ASheetName: WideString;
  ASheetIndex, ARow, ACol, AOutRow2, AOutCol2: Integer;
  AVolatile: Boolean; AReferences: TXLSWorkspaceDepReferenceList;
  ARefUnstable: Boolean = False): Integer;
procedure TXLSWorkspaceDepGraph.DirtyTopoOrder(AOrder: TList;
  out ACycleNodeCount, ABlockedNodeCount: Integer);

TXLSWorkspaceDepGraph.AddNode dołącza węzeł formuły i zwraca jego numerowany od zera indeks węzła, kopiując podane odwołania zamiast posiadać ich listę; indeksy arkuszy są numerowane od 1, podczas gdy współrzędne wiersza i kolumny, łącznie z prawym dolnym narożnikiem włącznego prostokąta wyjścia, są współrzędnymi kalkulatora numerowanymi od zera

TXLSWorkspaceDepReferenceList.Add dołącza rekord rozwiązanej odwołania komórki, zakresu albo nazwy zdefiniowanej, TXLSWorkspaceDepReferenceList.Items czyta te rekordy po indeksie numerowanym od zera, a TXLSWorkspaceDepReferenceList.Clear resetuje listę do ponownego użycia; wywołujący posiada tę listę wejściową i może ją wyczyścić albo zwolnić po skopiowaniu wpisów przez AddNode

TXLSWorkspaceDepGraph.BuildEdges rozwiązuje zapisane odwołania komórek i zakresów względem prostokątów wyjścia formuł; odwołania oznaczone LookupScan propagują brud, ale nie narzucają kolejności ewaluacji ani nie uczestniczą w wykrywaniu cykli

TXLSWorkspaceDepGraph.NodeIndexOf rozwiązuje skoroszyt, arkusz, wiersz i kolumnę na numerowany od zera indeks węzła albo -1 przy braku, korzystając z nazwy arkusza, gdy jest dostępna, i zadeklarowanego indeksu arkusza jako fallbacku

TXLSWorkspaceDepGraph.FindDependentsOfDefinedName czyści podaną nie-nilową TList i wypełnia ją indeksami węzłów bezpośrednio odwołujących się do nazwanego symbolu w określonym skoroszycie i zakresie, przy czym ujemny indeks zakresu pasuje do wszystkich zakresów; wpisy są kodowane jako Pointer(NativeInt(NodeIndex)), więc nilowy wpis listy może reprezentować węzeł zero

Generacje dirty i kolejność ewaluacji przestrzeni roboczej

TXLSWorkspaceDepGraph.BeginDirtyGeneration rozpoczyna nową generację, resetuje aktywną liczbę węzłów dirty i flagi zablokowanych cykli oraz unieruchamia wcześniejsze znaczniki dirty; wywołaj ją przed oznaczaniem węzłów dla nowego przebiegu przeliczenia

TXLSWorkspaceDepGraph.MarkAllDirty oznacza każdy węzeł w bieżącej generacji; TXLSWorkspaceDepGraph.MarkWorkbookDirty zasiaje węzły należące do wskazanego skoroszytu i węzły się do niego odwołujące, po czym propaguje do zależnych, podczas gdy TXLSWorkspaceDepGraph.MarkVolatileDirty zasiaje węzły lotne, a TXLSWorkspaceDepGraph.MarkCyclesDirty zasiaje wykryte składowe cykli, też propagując ich brud

TXLSWorkspaceDepGraph.IsNodeDirty raportuje, czy poprawny węzeł niesie znacznik bieżącej generacji, i zwraca False dla nieprawidłowego indeksu; TXLSWorkspaceDepGraph.DirtyGeneration ujawnia ten znacznik, a TXLSWorkspaceDepGraph.DirtyNodeCount liczy węzły oznaczone w aktywnej generacji

TXLSWorkspaceDepGraph.DirtyTopoOrder wymaga nie-nilowej TList należącej do wywołującego, czyści ją i wypełnia indeksami węzłów dirty w kolejności zależności, wykluczając dirty węzły cykli i węzły zablokowane przez te cykle; jej dwa wyjściowe liczniki odróżniają członków cykli od zablokowanych węzłów zstępnych, a wpisy listy korzystają z tej samej konwencji numerowanego od zera indeksu zakodowanego w wskaźniku

TXLSWorkspaceDepGraph.HasRefUnstable raportuje, czy jakikolwiek węzeł został dodany z flagą niestabilności odwołań, co pozwala wywołującemu uniknąć polegania na nieaktualnym statycznym harmonogramie, gdy odwołania formuł potrafią się zmieniać w czasie ewaluacji; graf sam nie rozwiązuje tych zmiennych odwołań

Inspekcja grafu przestrzeni roboczej

TXLSWorkspaceDepGraph.NodeCount liczy węzły formuł, TXLSWorkspaceDepGraph.ReferenceCount liczy skopiowane odwołania, a TXLSWorkspaceDepGraph.EdgeCount raportuje zbudowane krawędzie zależności; wywołaj BuildEdges przed konsumowaniem statystyk krawędzi

TXLSWorkspaceDepGraph.WorkbookCount liczy internowane tożsamości skoroszytów, łącznie z tożsamościami wprowadzonymi przez odwołania, a TXLSWorkspaceDepGraph.WorkbookIdentities je enumeruje po indeksie numerowanym od zera; te ciągi tożsamości to klucze grafu, a nie dowód wczytania zewnętrznego pliku

TXLSWorkspaceDepGraph.ComponentCount raportuje liczbę silnie spójnych składowych po budowie składowych, wyzwalanej przez MarkCyclesDirty, DirtyTopoOrder albo dostęp do składowych; każdy rekord Components dostarcza NodeStart, NodeCount i IsCycle

TXLSWorkspaceDepGraph.ComponentNodes ujawnia spłaszczoną tablicę indeksów węzłów numerowanych od zera dla tych składowych, indeksowaną od NodeStart składowej po NodeStart + NodeCount - 1; liczniki i indeksowane rekordy opisują bieżący graf i powinny być pozyskane ponownie po rekonstrukcji grafu

Kontynuuj dodatkowymi składnikami fasady XLSX i przeglądem fasady XLSX dla zwykłych punktów wejścia skoroszytu