Dodatkowe elementy API biblioteki
Ta strona uzupełnia dokumentację typów publicznych, które wspierają główne interfejsy API skoroszytu, arkusza, renderowania, importu, diagnostyki i przeglądarki, ale nie wymagają osobnego przewodnika zadaniowego
Filtrowanie i formatowanie warunkowe
TXLSAutofilter | Add, AddAutofilterData, AssignFrom, Cleari ParseAutofilterData edytują lub importują definicję filtra; SetRangeBounds(ARow1, ACol1, ARow2, ACol2) przywraca granice inkluzywne numerowane od jedynki, bez usuwania wczytanych kryteriów ani kształtów list rozwijanych, i ignoruje granice nie dodatnie, odwrócone oraz liczbę kolumn różniącą się od wczytanych pól; Defined, FirstRow, FirstCol, LastCol, LastRowi FieldCount udostępniają jego aktywne granice oraz liczbę filtrowanych kolumn |
TXLSAutofilterItem | Shape udostępnia rysunek przycisku filtra powiązany z elementem, a wczytane kryterium filtra jest dostępne jako rekord operandu TXLSAutofilterDOPER — DataType wybiera postać operandu, a grbitSgn niesie bity znaku i flag — do inspekcji lub edycji z zachowaniem przy przebiegu zapisu |
TXLSDataBarSpec | AxisColor, AxisIsThemeColor, AxisThemeColorId, AxisThemeColorTinti ClearAxisThemeColor sterują osią; Direction, GradientFill, NegativeBarBorderColorSameAsPositive, NegativeBarColor, NegativeBarColorSameAsPositivei NegativeBorderColor sterują wyglądem paska; IsIndexedColor, IndexedColorIndexi ClearIndexedColor zarządzają kolorem paska jako indeksem palety |
TXLSIconSetSpec | ThresholdEqualsInclude wybiera porównanie z uwzględnieniem lub z wyłączeniem równości dla każdego progu ikony |
TXLSCfValue | IsIndexedColor i IndexedColorIndex zgłaszają kolor progu zapisany jako indeks starszej palety, ClearIndexedColor ponownie usuwa tę formę, a kolory motywu i jawne kolory pozostają dostępne przez istniejące metody dostępu |
TXLSCfValue, TXLSDataBarSpec, TXLSColorScaleSpec, TXLSIconSetSpeci TXLSDxfStyle przyjmują AttachWriteGuardOwner, który wiąże obiekt reguły z posiadanym skoroszytem, tak aby edycje automatycznie nabywały strażnika zapisu; właściciel implementuje TXLSCondFormatWriteGuardOwner, którego jedyna metoda AcquireWriteGuard przekazuje regule strażnika zapisu skoroszytu. TXLSDxfStyle dodaje FontColorIndex z FontColorIsIndexed oraz pary FillFgColorIndex / FillFgColorIsIndexed i FillBgColorIndex / FillBgColorIsIndexed dla kolorów reguł w postaci indeksów palety, a także nadpisania czcionki różnicowej FontName, FontSizei FontScheme (pusty ciąg, rozmiar w punktach albo slot czcionki motywu, taki jak major / minor) obok istniejących członów pogrubienia, kursywy, podkreślenia i koloru; każde przypisanie nabywa strażnika zapisu i oznacza regułę jako zmodyfikowaną (dirty), gotową do ponownej emisji
TXLSConnections, TXLSDataTablesi TXLSQueryTables udostępniają OnAcquireWriteGuard (typy TXLSConnectionAcquireWriteGuard, TXLSDataTableAcquireWriteGuardi TXLSQueryTableAcquireWriteGuard) — punkt zaczepienia, którego ich ścieżki edycji używają, aby uzyskać IXLSWorkbookWriteGuard posiadanego skoroszytu przed modyfikacją i zwiększyć generację skoroszytu po niej; strażnik zapisuje StartGeneration, a Complete oznacza zapis jako ukończony, dzięki czemu zależne pamięci podręczne mogą zostać przebudowane
Zachowane połączenia danych niosą typowany opis: TXLSConnectionKind (xlckUnknown, xlckOdbc, xlckDao, xlckFile, xlckWeb, xlckOleDb, xlckText, xlckAdo) klasyfikuje połączenie, TXLSConnectionCredentials (xlccIntegrated, xlccNone, xlccStored, xlccPrompt) zapisuje jego tryb uwierzytelniania, a każda wartość parametru połączenia jest oznaczana przez TXLSConnectionParameterValueKind (xlcpvNone, xlcpvBoolean, xlcpvDouble, xlcpvInteger, xlcpvString, xlcpvCell). Tabele danych analizy „co jeśli" zgłaszają zapisany rodzaj definicji przez TXLSDataTableKind
Tabele danych analizy „co jeśli" i grupowanie tabel przestawnych
TXLSDataTable | Assign, ContainsCelli IsRoot kopiują tabelę i badają ją; Kind, FirstRow, FirstCol, LastCol, LastRow, AlwaysCalculate, ColumnInputCol, ColumnInputRow, ColumnInputDeleted, RowInputCol, RowInputRowi RowInputDeleted udostępniają zapisaną definicję obliczenia |
TXLSDataTables | Add, AddExisting, Delete, Clear, Assign, AdjustForShifti Offset obsługują kolekcję; FindByCell i FindRoot lokalizują tabelę zawierającą podaną komórkę lub zaczynającą się od niej; Count, Itemsi OnChange udostępniają stan kolekcji |
TXLSPivotCacheField | GroupBaseField i GroupParentField udostępniają relacje między polem pogrupowanym a jego polem źródłowym lub nadrzędnym |
Progi zestawów ikon można renderować i walidować programowo: XLSCfIconSetCount zgłasza, ile ikon definiuje dany TXLSIconSetType , a XLSBuildCfIconGeometry wypełnia TXLSCfIconGeometry prymitywami (TXLSCfIconPrimitive, rodzaj TXLSCfIconPrimitiveKind: cfipPolygon, cfipEllipse, cfipRect, cfipLine) i punktami (TXLSCfIconPoint) rysującymi jedną ikonę, dzięki czemu własne renderery odwzorowują wbudowane kształty ikon Excela
Diagnostyka, śledzenie formuł i walidacja
TXLSDiagnostic | Code, NativeCode, Message, Severity, ExceptionClass, PartName, RecordId, SheetIndex, SheetNamei StreamOffset identyfikują pojedynczą diagnostykę analizatora, zapisu lub pakietu |
TXLSDiagnostics | Add dołącza diagnostykę, Clear resetuje kolekcję, a Count wraz z Items wyliczają jej wpisy |
TXLSDiagnosticSeverity and TXLSDiagnosticOperation | TXLSDiagnosticSeverity (xlsDiagnosticInfo, xlsDiagnosticWarning, xlsDiagnosticError, xlsDiagnosticFatal) klasyfikuje pojedynczą diagnostykę, a TXLSDiagnosticOperation (xlsOperationNone, xlsOperationOpen, xlsOperationSave, xlsOperationCalculate, xlsOperationExport) nazywa fazę, która ją wygenerowała; procedury obsługi OnDiagnostic odczytują oba z dostarczonego TXLSDiagnostic |
TXLSFormulaDebugSession | CurrentStep, DependencyCount, NodeCounti StepCount udostępniają bieżącą migawkę debugera oraz rozmiary jego śladu |
TXLSFormulaTracer | StepCount zgłasza liczbę zapisanych kroków obliczania |
TXLSImportCheck | AddRule, AddUniqueRulei AddCrossColumnRule konfigurują predykaty kolumn, kompozytową unikatowość i typowane porównania; Check zwraca ustrukturyzowane naruszenia z zapisanych wartości arkusza i pamięci podręcznych formuł, bez przeliczania i bez materializowania spakowanych komórek; HeaderRow, FirstRow, LastRow, OnVerifyCell, ViolationCounti Violation udostępniają granice, callbacki i wyniki; Annotate i KeepOnlyViolations to jawne operacje skoroszytu poprawek; zobacz schematy walidacji importu, aby poznać typy, granice, systemy dat, tożsamość krotek i zachowanie przy awariach |
Schematy walidacji importu
TXLSImportCheck z lxImportCheck waliduje TXLSXWorksheet względem reguł należących do aplikacji; bada zapisane wartości skalarne i zapisane wyniki formuł, we współrzędnych arkusza numerowanych od jedynki, bez domniemanej konwersji tekst-na-liczbę, tekst-na-datę albo tekst-na-wartość logiczną
Validator := TXLSImportCheck.Create;
try
Validator.HeaderRow := 1;
Rule := Validator.AddRule(2);
Rule.Name := 'quantity';
Rule.Flags := [irRequired, irValueType, irValueRange];
Rule.ValueKind := ivkInteger;
Rule.MinimumValue := 1;
Rule.MaximumValue := 1000;
Validator.AddUniqueRule([1, 3]).Name := 'account-and-region';
Validator.AddCrossColumnRule(4, 5, icLessOrEqual).Name := 'start-before-end';
FailureCount := Validator.Check(Sheet);
if FailureCount > 0 then
Validator.Annotate(Sheet, 'Import validator');
finally
Validator.Free;
end;HeaderRow > 0 zaczyna sprawdzanie od następnego wiersza i ma pierwszeństwo przed FirstRow; w przeciwnym razie FirstRow przyjmuje domyślnie 1; LastRow = 0 używa ostatniego używanego wiersza arkusza, podczas gdy dodatnie LastRow może obejmować nieobecne komórki bez ich tworzenia; kolumny muszą się mieścić w przedziale od 1 do 16 384, a aktywne granice wierszy danych w przedziale od 1 do 1 048 576
Reguły kolumn i typy jawne
TlxImportColumnRule | Column, Flags, Name, Title, MinLength, MaxLength, Pattern, ValueKindi DateSerialMode konfigurują jedną kolumnę; MinimumValue, MaximumValue, HasMinimum, HasMaximum, MinimumInclusivei MaximumInclusive konfigurują granice; Validate sprawdza konfigurację schematu, a PreparePattern przygotowuje wyrażenie regularne; oba przeciążenia Check zwracają wartość logiczną z komunikatem błędu i opcjonalnie TlxImportViolationKind |
TlxImportRuleFlags | irRequired, irTextLength, irPattern, irUniquei irCallback zachowują swoje dotychczasowe kontrole; irValueType włącza ValueKind, a irValueRange włącza skonfigurowane granice; kolumna bez flag nie jest sprawdzana |
TlxImportValueKind | ivkAny przyjmuje obsługiwane skończone wartości skalarne, ivkNumber przyjmuje skończone Varianty liczbowe, ivkInteger dodatkowo wymaga wartości całkowitej, ivkDate przyjmuje Varianty daty albo jawnie włączone wartości seryjne Excela, ivkBoolean wymaga Variantu logicznego, a ivkText wymaga Variantu tekstowego |
TlxImportDateSerialMode | idsNone jest domyślne i utrzymuje odrębność wartości liczbowych od dat; idsExcel1900 i idsExcel1904 jawnie interpretują wartości liczbowe dla kolumny używającej irValueType z ValueKind = ivkDate |
AddRule(Column) zastępuje i zwalnia poprzednią regułę tej kolumny; predykaty per wartość — typu, zakresu, długości i wzorca — pomijają wartości brakujące, nulle i puste ciągi, podczas gdy irRequired je zgłasza; unikatowość zachowuje opisane niżej odrębne polityki; niepusty whitespace pozostaje wartością; liczba nie kwalifikuje się jako wartość logiczna, data nie kwalifikuje się jako zwykła liczba, a ciąg wyglądający jak liczba pozostaje tekstem
Przypisanie MinimumValue albo MaximumValue włącza daną granicę; dowolne z HasMinimum albo HasMaximum może ją znów wyłączyć; oba przełączniki inkluzywności domyślnie mają True; granice muszą być skończonymi typowanymi liczbami albo datami, a obie granice muszą być porównywalne i opisywać niepusty przedział; odwrócone, brakujące, niezgodne albo puste granice rzucają wyjątek, zanim walidacja arkusza się zacznie
Granice liczbowe porównują wartości liczbowe, a granice dat porównują daty; porównania całkowite z całkowitą zachowują wszystkie bity Int64 i UInt64; wartości niezgodnej kategorii nie przechodzą sprawdzania zakresu; predykaty długości tekstu i wyrażeń regularnych nadal badają tekstową reprezentację skalara, a kontrole regex zachowują dotychczasowe zachowanie IsMatch, więc użyj kotwic takich jak ^...$, gdy dopasowany musi być kompletny tekst; nieprawidłowe wyrażenie regularne wyłącza swoją kontrolę wzorca dla zachowania kompatybilności
Wartości Excela sformatowane jako daty
Komórka zaimportowana z Excela może zawierać numeryczną wartość seryjną, nawet gdy jej format liczbowy wyświetla datę; wybierz tryb seryjny jawnie, gdy taki jest akceptowany schemat importu; tryb wpływa wyłącznie na walidację i nigdy nie zmienia zapisanej wartości komórki
Rule := Validator.AddRule(4); Rule.Flags := [irRequired, irValueType, irValueRange]; Rule.ValueKind := ivkDate; if Sheet.Workbook.Date1904 then Rule.DateSerialMode := idsExcel1904 else Rule.DateSerialMode := idsExcel1900; Rule.MinimumValue := VarFromDateTime(EncodeDate(2026, 1, 1)); Rule.MaximumValue := VarFromDateTime(EncodeDate(2026, 12, 31));
VarFromDateTime jest zadeklarowane w Variants, a EncodeDate w SysUtils; numeryczne wartości seryjne muszą być nieujemne i rozwiązywać się przed 1 stycznia 10000; ułamkowe wartości seryjne zachowują porę dnia; system 1900 odrzuca każdą wartość seryjną od 60 włącznie do 61 z wyłączeniem, bo ten przedział oznacza fikcyjny dzień przestępny; system 1904 mapuje wartość zero na 1 stycznia 1904
Granice dat obejmują porę dnia, więc maksimum ustawione na północ 31 grudnia wyklucza późniejsze czasy tego dnia; użyj wyłącznej granicy górnej na 1 stycznia następnego roku, gdy cały ostatni dzień musi być zaakceptowany; daty tekstowe, takie jak 10/08/2026, pozostają tekstem niezależnie od skonfigurowanego trybu seryjnego
Kompozytowa unikatowość i porównania między kolumnami
AddUniqueRule(const AColumns: array of Integer): TlxImportUniqueRule | Dodaje niezależne ograniczenie krotki na uporządkowanej, niepustej liście odrębnych kolumn; Name identyfikuje regułę, Title prefiksuje jej komunikat, ColumnCount i indeksowane od zera Columns[Index] udostępniają jej członków, a SkipIncompleteRows domyślnie ma True |
AddCrossColumnRule(ALeftColumn, ARightColumn: Integer; AComparison: TlxImportComparison): TlxImportCrossColumnRule | Dodaje porównanie w tym samym wierszu z tylko do odczytu LeftColumn i RightColumn oraz edytowalnymi Comparison, Name, Titlei SkipBlankValues, które domyślnie ma True |
TlxImportComparison | icEqual, icNotEqual, icLess, icLessOrEqual, icGreateri icGreaterOrEqual wybierają relację; pary liczbowe i pary dat porównują swoje wartości, pary logiczne porządkują False przed True, a pary ciągów porównują ordinalnie jednostki kodowe UTF-16 z rozróżnianiem wielkości liter |
Klucze kompozytowe zachowują dokładny typ Variant i tożsamość tekstową każdego członka; Integer(1), Double(1), ciąg '1', wartość logiczna i data to odrębni członkowie; nie ma składania wielkości liter, normalizacji Unicode, parsowania ustawień regionalnych ani wieloznaczności separatorów; kombinacje takie jak ('ab', 'c') i ('a', 'bc') pozostają różne; każdy przebieg walidacji zaczyna świeży indeks krotek
Gdy SkipIncompleteRows = True, brakujący, null albo pusty członek tekstowy wyklucza dany wiersz z unikatowości krotek; ustawienie na False włącza tych członków z ich oryginalnymi tożsamościami Variant; duplikat zgłasza pierwszą kolumnę krotki jako swój adres komórki i pierwszy pasujący wiersz przez FirstDuplicateRow
Istniejąca jednokolumnowa reguła irUnique zachowuje swoje tekstowe dopasowanie bez rozróżniania wielkości liter i pomija wartości brakujące lub nulle; użyj AddUniqueRule([Column]), gdy dla jednej kolumny wymagana jest ścisła typowana tożsamość
Porównania między kolumnami nigdy nie koercują ciągów na liczby, liczb na wartości logiczne ani zwykłych liczb na daty; mieszane niezgodne kategorie zawodzą nawet dla icNotEqual; porównania ciągów rozróżniają Unicode złożony i rozłożony, zachowują osadzone znaki null i używają porządku krótszy-prefiks-pierwszy; gdy SkipBlankValues = False, dowolny pusty operand produkuje naruszenie międzykolumnowe
Ustrukturyzowane wyniki i skoroszyty poprawek
TlxImportViolation | Row, Col, SheetNamei Address identyfikują komórkę, przy czym Address jest w notacji A1; ValueTexti ErrorText niosą informacje wyświetlane; RuleNamei Kind identyfikują skonfigurowaną regułę i kategorię awarii; RelatedColumn identyfikuje drugi operand przy awarii międzykolumnowej, a FirstDuplicateRow identyfikuje oryginalny wiersz przy awariach unikatowości |
TlxImportViolationKind | ivRequired, ivTextLength, ivPattern, ivUnique, ivCallback, ivValueType, ivValueRange, ivCellError, ivFormulaCacheMissing, ivCompositeUniquei ivCrossColumn rozróżniają obsługiwane kategorie awarii |
Check(Sheet) zwraca liczbę naruszeń, a ViolationCount plus indeksowane od zera Violation(Index) wyliczają raport; jedna reguła kolumny zgłasza swój pierwszy zawodzący predykat, a niezależnie skonfigurowane reguły krotek i porównań mogą dodać kolejne naruszenia dla tej samej komórki; przypisuj sensowne wartości Name, gdy wywołujący potrzebują stabilnych identyfikatorów reguł aplikacji
Komórki formuł są walidowane według zapisanych wartości z pamięci podręcznej; formuła bez zapisanego wyniku w pamięci podręcznej zgłasza ivFormulaCacheMissing, a wynik błędu zgłasza ivCellError; jawnie przelicz przed sprawdzaniem, gdy wymagane są świeże wyniki formuł; walidacja nie sięga do źródeł zewnętrznych, nie zmienia definicji formuł i nie wylicza formuł bez pamięci podręcznej
OnVerifyCell zachowuje sygnaturę callbacku TlxImportVerifyCell i uruchamia się po udanych, mających zastosowanie predykatach kolumn oraz kontrolach unikatowości; zwraca wartość logiczną i może ustawić komunikat błędu aplikacji; callbacki muszą utrzymywać skoroszyt i schemat walidacji bez zmian, a zapisy do skoroszytu odrzuca dzierżawa odczytu; wyjątki callbacków propagują się, a dzierżawa jest zwalniana dla kolejnych operacji
Check nigdy nie adnotuje, nie usuwa wierszy i nie materializuje spakowanych wartości; użyj Annotate po sprawdzeniu, aby nałożyć czerwoną czcionkę i dopisać tekst błędu do istniejących komentarzy, albo jawnie wywołaj KeepOnlyViolations, by usunąć wiersze bez naruszeń i utworzyć skoroszyt poprawek; te metody modyfikują podany arkusz, więc wywołuj je na zamierzonym skoroszycie po przejrzeniu raportu
Walidacja pożycza arkusz i skoroszyt na czas synchronicznego wywołania; nie przejmuje własności obiektów wywołującego ani nie wymaga skoroszytu będącego interfejsem; dzierżawa odczytu chroni istotne migawki zapisanych komórek i dostęp do zapisanych pamięci podręcznych formuł przez cały czas trwania sprawdzenia
Zasady zapisywania łączy zewnętrznych
TXLSExternalLinkUpdateMode = (xluPromptUser, xluNever, xluAlways);
property IXLSWorkbook.SaveExternalLinkValues: Boolean;
property IXLSWorkbook.UpdateLinks: TXLSExternalLinkUpdateMode;
property TXLSXWorkbook.SaveExternalLinkValues: Boolean;
property TXLSXWorkbook.UpdateLinks: TXLSExternalLinkUpdateMode;
xluPromptUser; xluNever i xluAlways zmieniają jedynie przechowywaną w skoroszycie preferencję aktualizacji i nigdy nie autoryzują ani nie inicjują dostępu do zewnętrznych plików czy sieci
Audyt obliczeń i podpowiedzi skoroszytu
function TXLSWorkbook.RecalcAndVerify(MaxIssues: Integer = 10000): TXLSCalculationAuditReport;
function TXLSXWorkbook.RecalcAndVerify(MaxIssues: Integer = 10000): TXLSCalculationAuditReport;
function TXLSWorkbook.RecalcAndVerifyEx(const Options: TXLSRecalcAuditOptions): TXLSCalculationAuditReport;
function TXLSXWorkbook.RecalcAndVerifyEx(const Options: TXLSRecalcAuditOptions): TXLSCalculationAuditReport;
function TXLSWorkbook.RunCalculationAudit(const Options: TXLSRecalcAuditOptions): TXLSCalculationAuditReport;
function TXLSWorkbook.FormulaIsVolatile(Formula: WideString): Boolean;
function TXLSWorkbook.AuditOverlayHash(SheetIndex, Row, Col: Integer): Integer;
function TXLSWorkbook.AuditOverlayRead(SheetIndex, Row, Col: Integer; var Value: Variant): Boolean;
procedure TXLSWorkbook.AuditOverlayWrite(SheetIndex, Row, Col: Integer; const Value: Variant);
procedure TXLSWorkbook.AuditOverlayClear;
TXLSCalculationAuditIssueKind = (xlcaiCacheMismatch, xlcaiParseFailure,
xlcaiMissingFunction, xlcaiMissingName, xlcaiUnsupportedArguments,
xlcaiCircularReference, xlcaiExternalReferenceDenied,
xlcaiExternalReferenceMissing, xlcaiDataTableSkipped, xlcaiCancelled,
xlcaiInternalFailure);
TXLSCalculationAuditIssue = record
Kind: TXLSCalculationAuditIssueKind;
SheetIndex: Integer;
SheetName: WideString;
Row: Integer;
Col: Integer;
Formula: WideString;
Symbol: WideString;
Expected: Variant;
Actual: Variant;
ResultCode: Integer;
Stack: WideString;
ExternalTarget: WideString;
end;
TXLSCalculationAuditIssues = array of TXLSCalculationAuditIssue;
TXLSRecalcAuditProgress = procedure(ASender: TObject;
ACurrent, ATotal: Integer; var ACancel: Boolean) of object;
property WorkbookCodeName: WideString;
property CalculationThreadMode: TXLSCalculationThreadMode;
property ForceFullCalculationState: TXLSOptionalBooleanState;
property RefreshAllOnLoadState: TXLSOptionalBooleanState;
RecalcAndVerify łączy błędy symboli formuł i niezgodności wartości z pamięci podręcznej w stabilne, ustrukturyzowane kategorie ze współrzędnymi arkusza, formułami, symbolami, wartościami oczekiwanymi i rzeczywistymi oraz ograniczonym skracaniem, pozostawiając pamięci podręczne i semantykę skoroszytu bez zmian. RecalcAndVerifyEx uruchamia pogłębiony audyt: oblicza każdą formułę jednokrotnie przez graf zależności do odizolowanej nakładki wyników, tak aby komórki zależne czytały wynik tego przebiegu zamiast nieaktualnych pamięci podręcznych, klasyfikuje błędy obliczeń (nieobsługiwane argumenty, odwołania cykliczne, odmówione lub brakujące odwołania zewnętrzne, pominięte tabele danych, anulowanie, wewnętrzne awarie) z kodami wyników, zapisuje ograniczony stos wywołań dla każdego błędu, respektuje budżet problemów oraz punkt zaczepienia postępu i anulowania, a także pozostaje tylko do odczytu, dopóki ApplyResults nie zatwierdzi atomowo przeliczonych wartości po w pełni udanym przebiegu nad niezmienioną strukturą skoroszytuAbsoluteTolerance i RelativeTolerance sterują raportowaniem niezgodności, a nie pośrednimi wartościami obliczeń czy jawnym zastosowaniem pamięci podręcznych
Dla wyników liczbowych niezgodność wymaga różnicy bezwzględnej powyżej AbsoluteTolerance oraz, gdy tolerancja względna jest włączona, powyżej RelativeTolerance * max(abs(Expected), abs(Actual))
Równość na którymś z progów jest tolerowana; zmienione wartości i tak trafiają do nakładki audytu, więc formuły zależne widzą bieżące obliczenia, a ApplyResults zatwierdza te wartości nawet wtedy, gdy ich różnice nie podlegają raportowaniu
Audyt tylko do odczytu nigdy nie zmienia zapisanych pamięci podręcznychTXLSCalculationAuditReport.Issues to TXLSCalculationAuditIssue; Kind wybiera jedną z kategorii xlcai* , Expected / Actual niosą porównywane wartości dla niezgodności pamięci podręcznej, Stack to ograniczony łańcuch wywołań obliczeń renderowany jako Sheet!A1 > Sheet!B2 (skrajnie zewnętrzna ramka jako pierwsza), a ExternalTarget opisuje skoroszyt zewnętrzny dla problemów z odwołaniami zewnętrznymi. TXLSRecalcAuditOptions.OnProgress to punkt zaczepienia TXLSRecalcAuditProgress otrzymujący postęp ACurrent / ATotal węzłów i mogący ustawić ACancel , aby zatrzymać audyt na najbliższej granicy węzła z jednym problemem xlcaiCancelled issueRunCalculationAudit to punkt wejścia silnika, do którego delegują wrappery audytu na poziomie skoroszytu, i przyjmuje ten sam rekord opcji. FormulaIsVolatile zgłasza, czy formuła wymuszałaby przeliczanie przy każdym przebiegu (wywołania takie jak NOW, RAND, TODAY, OFFSET, INDIRECTalbo nierozwiązywalne odwołanie)AuditOverlayWrite zapisuje wartość zastępczą dla jednej komórki (indeks arkusza od jedynki, wiersz i kolumna od zera — zgodnie z konwencją kalkulatora), AuditOverlayRead i AuditOverlayHash odpytują ją, a AuditOverlayClear opróżnia warstwę. Wartości z nakładki zwracają zwykłe metody dostępu do wartości komórek, więc przeliczanie i pogłębiony audyt je widzą bez modyfikowania komórek arkusza; wyczyszczenie nakładki przywraca wartości zapisaneFormuły tabel i stan IME
property TXLSXTable.ColumnCalculatedFormulaArrayStates[Index: Integer]: TXLSTableFormulaArrayState;
property TXLSXTable.ColumnTotalsFormulaArrayStates[Index: Integer]: TXLSTableFormulaArrayState;
property TDataValidation.ImeMode: TXLSDataValidationImeMode;
property TXLSXDataValidation.ImeModeKind: TXLSDataValidationImeMode;
SaveExternalLinkValues na False pomija klasyczne rekordy XCT i CRN albo poddrzewo sheetDataSet zewnętrznego skoroszytu XLSX, zachowując cele łączy, nazwy arkuszy, zewnętrzne nazwy zdefiniowane, relacje, odwołania formuł, nieznany XML i pamięć podręczną w pamięci operacyjnej; przywrócenie właściwości na True w tym samym skoroszycie może ponownie zserializować tę zachowaną pamięć podręczną
Inspekcja i usuwanie okienek zadań dodatków internetowych
function IXLSWorkbook.HasWebAddinTaskPanes: Boolean;
function IXLSWorkbook.WebAddinTaskPaneCount: Integer;
function IXLSWorkbook.RemoveWebAddinTaskPanes: Integer;
function TXLSXWorkbook.HasWebAddinTaskPanes: Boolean;
function TXLSXWorkbook.WebAddinTaskPaneCount: Integer;
function TXLSXWorkbook.RemoveWebAddinTaskPanes: Integer;
1303 i zgłaszają wyjątek przed modyfikacją, podczas gdy klasyczny XLS i ODS zwracają False, 0i -1 bez skanowania pakietu
Polityka wyświetlania obiektów skoroszytu
TXLSObjectDisplayMode = (xlsodmShowAll, xlsodmShowPlaceholders,
xlsodmHideAll);
property IXLSWorkbook.ObjectDisplayMode: TXLSObjectDisplayMode;
property TXLSWorkbook.ObjectDisplayMode: TXLSObjectDisplayMode;
property TXLSXWorkbook.ObjectDisplayMode: TXLSObjectDisplayMode;
property TXLSPaginationModel.ExportObjectPlaceholders: Boolean;
property TXLSPDFExport.ExportObjectPlaceholders: Boolean;
property TXLSSvgExport.ExportObjectPlaceholders: Boolean;
property TXLSPageImageExporter.ExportObjectPlaceholders: Boolean;
property TXLSPrintDocument.ExportObjectPlaceholders: Boolean;
property TXLSXHtmlExportOptions.ExportObjectPlaceholders: Boolean;
workbookPr.showObjects; brakujące wartości oznaczają domyślnie xlsodmShowAll, nietknięte zarezerwowane ładunki Classic i nieobsługiwane tokeny XLSX pozostają bezstratne, a jawne przypisania emitują wyłącznie kanoniczne wartości
ExportObjectPlaceholders żąda tej samej taniej polityki bez dekodowania ładunków obrazów i bez budowania scen wykresów
xlsodmHideAll blokuje zbieranie kolekcji rysunków i rozszerzanie zakresów sterowane obiektami przed rozpoczęciem renderowania; konwersja skoroszytów przenosi wszystkie trzy stany, ODS zapisuje kompletne rysunki dla trybu placeholderów i pomija wyjście rysunków oraz mediów dla trybu hide-all, a tła arkuszy pozostają niezależne
Wartości kalibracji renderowania i migawki
TXLSRenderCalibration = record
WidthCorrection: Double;
HeightCorrection: Double;
LineSpacing: Double;
CellMarginFactor: Double;
ScreenScaling: Integer;
MeasurementDpi: Integer;
end;
function XLSDefaultRenderCalibration: TXLSRenderCalibration;
function XLSValidateRenderCalibration(const AValue: TXLSRenderCalibration;
out AInvalidField: TXLSRenderCalibrationField): Boolean;
1, 1, 1, 1, 100i 96; poprawki szerokości i wysokości muszą być większe od zera i mniejsze od dwóch, interlinia jest ograniczona do (0, 4], marginesy komórek do [0, 4], skalowanie ekranu do [100, 500] procent, a pomiarowe DPI do [36, 2400]RenderCalibration, CaptureRenderCalibrationi ResetRenderCalibration ; przypisanie całego rekordu jest walidowane przed modyfikacją, a każde przechwycenie zwraca niezależną, niezmienną z umowy migawkę wartości dla jednej operacji renderowania
Geometria renderowania i pomiar czcionek
TXLSRenderGeometryBackend = (xlsrgbAutoFit, xlsrgbPagination, xlsrgbPdf,
xlsrgbSvg, xlsrgbBitmap, xlsrgbPrintPreview, xlsrgbViewer, xlsrgbHtml);
TXLSRenderFont = record
Name: WideString;
Size: Double;
Styles: TXLSRenderFontStyles;
Charset: Byte;
end;
function CreateXLSRenderGeometry(
const ACalibration: TXLSRenderCalibration;
AWorkbookGeneration: UInt64;
ABackend: TXLSRenderGeometryBackend;
ACacheCapacity: Integer = 4096): IXLSRenderGeometry;
property TXLSHTMLExport.RenderGeometry: IXLSRenderGeometry;
property TXLSXHtmlExportSession.RenderGeometry: IXLSRenderGeometry;
IXLSRenderGeometry jest właścicielem jednej niezmiennej kalibracji, generacji skoroszytu, tożsamości silnika renderującego, usługi pomiarowej i ograniczonej pamięci podręcznej metryk lokalnej dla operacji; CreateXLSRenderGeometry używa GDI, natomiast CreateXLSPortableCairoRenderGeometry w lxPortableCairo używa jawnych bajtów czcionek z FreeType/HarfBuzz na natywnym Linuxie lub macOS; MeasureText zwraca szerokość i wysokość w pikselach, wysokość linii, wzniesienie, zejście oraz liczbę linii, a MaximumDigitWidthPixels, ColumnWidthToPixels, PixelsToColumnWidth, PointsToPixels, PixelsToPointsi UsableCellWidthPixels zapewniają wspólne przekształcenia geometrii
MarkSheet , podczas gdy TXLSPaginationModel.Build przechwytuje jedną usługę dla wybranego RenderBackend; punkty wejścia PDF, SVG, bitmapy, podglądu wydruku, przeglądarki skoroszytów i HTML wybierają własny silnik renderujący przed wyjściem, zmiana kalibracji skoroszytu nie może zmodyfikować istniejącej migawki, a wyjście nie zapisuje wymiarów arkusza
xlsrgbHtml , natomiast przyrostowa sesja TXLSXHtmlExportSession przechwytuje ją raz w BeginExport i ponownie używa tej migawki dla wszystkich arkuszy; oba eksportery udostępniają przechowywaną usługę przez RenderGeometry dla diagnostyki kalibracji i pamięci podręcznej
IXLSRenderGeometry dostępne tylko do odczytu — WorkbookGeneration, CacheCapacityi CacheEntryCount — zgłaszają powiązaną generację i zapełnienie pamięci podręcznej dla diagnostyki, a ImplicitWidthMaximumDigitWidthPixels zwraca pomiar szerokości cyfry leżący u podstaw emulacji domyślnych szerokości kolumn
MeasureText wypełnia rekord TXLSRenderTextMetrics (szerokość i wysokość w pikselach, wysokość linii, wzniesienie, zejście oraz liczba linii) na podstawie TXLSRenderFont , którego składowa Styles jest zbiorem flag TXLSRenderFontStyle (bold, italic, underline, strikethrough)
Import, generowanie kodu, porównywanie i monitorowanie
TXLSHTMLImport | LoadFromHTML importują zawartość tabeli HTML ze strumienia lub pliku do arkusza, z opcjonalnymi współrzędnymi początkowymi, wyborem tabeli i separatorem dziesiętnym |
TXLSCodeGen | Language (typ TlxCodeGenLanguage: lcgDelphi lub lcgCppBuilder) wybiera dialekt źródłowy generowanych instrukcji, GenerateToList zapisuje wygenerowany kod skoroszytu do listy ciągów, a TlxCodeGenOptions rozszerza wyjście o scalenia, szerokości kolumn lub formaty liczb (cgoMerges, cgoColumnWidths, cgoNumberFormats; arkusze i komórki są emitowane zawsze) |
TXLSXWorkbookCompare | Compare porównuje typowane zapisane komórki, tekst formuł, obecność arkuszy i scalenia; Options dodaje pamięci podręczne formuł, bazowe style komórek oraz geometrię wierszy lub kolumn, SetNumericTolerance konfiguruje równość numeryczną, a Count, Diffi Report udostępniają uporządkowane wyniki; zobacz porównywanie skoroszytów |
TXLSFileMonitor | IntervalMs wybiera interwał odpytywania, a SynchronizeEvent zsynchronizowane doręczanie wywołania zwrotnego; procedura obsługi OnFileChanged może dezaktywować lub zniszczyć monitor albo zmienić FileName , aby zacząć obserwować inny plik |
TXLSCSVLoader and TXLSCSVSaver | Loader analizuje tekst rozdzielany do siatki Variantów w pamięci — ParseFile i ParseStream wypełniają siatkę, a CellValue, RowCounti ColCount odczytują ją z powrotem — z automatycznie wykrywanym separatorem (ValueSeparator) i kodowaniem (TXLSCsvEncoding: systemowe ANSI, UTF-16, UTF-8) oraz opcjonalną promocją typów sterowaną przez DetectTypes i per-kolumnowe wpisy ColumnTypes (TXLSCsvColumnType: auto, text, number, date, boolean, skip); SkipRows, AutoTrim, LocaleTolerantNumbersi FieldWidths doprecyzowują obsługę pól o stałej szerokości i ustawień regionalnych. TXLSCSVSaver.SaveAs zapisuje siatkę z powrotem z cudzysłowaniem zgodnym z RFC 4180, a QuoteAllStrings wymusza cudzysłowie; TXLSTSVSaver wywodzi się z savera dla wyjścia rozdzielanego tabulatorami |
Porównywanie skoroszytów
TXLSXWorkbookCompare w lxCompare porównuje dwie instancje TXLSXWorkbook bez przeliczania formuł i bez modyfikowania którejkolwiek ze stron; arkusze są parowane według nazwy bez rozróżniania wielkości liter, a sama zmiana kolejności arkuszy nie produkuje różnicy
Domyślna wartość Options jest pusta, a obie tolerancje domyślnie mają zero; porównanie domyślne zgłasza dodane lub usunięte arkusze, dodane lub usunięte zapisane komórki, zmienione typowane wartości literalne, zmieniony tekst formuł oraz dodane lub usunięte scalone zakresy
Porównanie literalne rozróżnia liczby, tekst, wartości logiczne, daty, błędy i puste: liczba 1 różni się od tekstu '1', wartość logiczna różni się od swojego zapisu tekstowego, daty zachowują własny typ, a błędy porównują się według zapisanego kodu błędu; numeryczne typy magazynowe o równych wartościach porównują się równo, a odrębne wartości Int64 pozostają odrębne w porównaniu dokładnym
lcoFormulaCachedResults | Dla komórek o zgodnym tekście formuł porównuje istniejący wynik w pamięci podręcznej i rozróżnia pamięć podręczną brakującą albo unieważnioną od dostępnej; wczytane i obliczone pamięci podręczne porównują się równo przy tej samej typowanej wartości |
lcoCellStyles | Porównuje rozwiązane style bazowe na zgodnych współrzędnych zapisanych komórek, włącznie z czcionkami, wypełnieniami, gradientami, obramowaniami, wyrównaniem, formatami liczbowymi i ochroną komórek; niepowiązany porządek wstawiania do puli stylów nie tworzy różnic, a kolory motywu rozwiązują się względem bieżącego motywu każdego skoroszytu |
lcoAxisGeometry | Porównuje efektywne wysokości wierszy, szerokości kolumn, flagi ukrycia, poziomy konspektu, flagi zwinięcia i domyślne wartości arkusza; jawny rozmiar równy efektywnemu domyślnemu porównuje się równo z rozmiarem domyślnym |
lcoDefinedNames | Porównuje nazwy z zasięgiem skoroszytu i arkusza, ich definicje formuł, widoczność, komentarze i flagi makr; zasięg podąża za nazwami arkuszy, a porządek wstawiania nie tworzy różnic |
lcoDataValidations | Porównuje definicje walidacji w porządku zapisu, włącznie ze znormalizowanymi zakresami celu, formułami, operatorami, monitami, komunikatami błędów i flagami kontrolnymi; zmiana kolejności zakresów celu w jednej definicji nie tworzy różnicy |
lcoConditionalFormats | Porównuje definicje formatowania warunkowego w porządku zapisu, włącznie z efektywnym pierwszeństwem, zachowaniem stop-if-true, zakresami celu, formułami, stylami różnicowymi oraz obsługiwanymi ustawieniami skali kolorów, paska danych i zestawu ikon; identyfikatory puli stylów i palety indeksowanej rozwiązują się do wartości semantycznych |
lcoTables | Paruje tabele według nazwy i porównuje zakresy, nagłówki, sumy, ustawienia stylów, komentarze, nazwy kolumn, etykiety, formuły, flagi tablicowe, nazwy unikatowe, nazwy połączeń, kryteria filtru i warunki sortowania; identyfikatory tabel, kolumn i porządek wstawiania nie tworzą różnic, natomiast identyfikatory różnicowych stylów filtru kolorów i sortowania rozwiązują się do wyglądu |
lcoDrawings | Porównuje typowane definicje rysunków w porządku rysowania, zachowując porządek dzieci grupy i porządek grup wykresu; obsługiwane kanoniczne definicje obejmują obrazy, pola tekstowe, wykresy, grupy, kompletne typowane widoki slicerów i typowane widoki osi czasu, a nieprzejrzyste albo nieobsługiwane węzły rysunków rzucają EXLSSemanticSnapshot |
lcoBlankStyleRegions | Porównuje rozwiązane style bazowe na współrzędnych bez zapisanej komórki po którejkolwiek stronie, włącznie z domyślnymi wartościami arkusza i wirtualnymi nakładkami stylów; równoważne podziały prostokątów porównują się równo, a równe sąsiednie zmiany scalają się w prostokąty bez materializowania komórek |
lcoRichTextRuns | Porównuje efektywne czcionki i tekst bloków na zgodnych zapisanych komórkach tekstowych, dziedziczy czcionkę bazową dla pominiętych właściwości bloków, ignoruje puste bloki i scal sąsiednie bloki o równych efektywnych czcionkach; zwykły tekst pasuje do równoważnego bloku rich-text z czcionką domyślną |
lcoPivotTables | Paruje typowane definicje tabel przestawnych według nazwy i porównuje powiązania źródeł, układ, pola, uporządkowanych członków widoku, agregacje danych, filtry, odwołania grupowania, definicje obliczeniowe, style i flagi natywnej materializacji; identyfikatory pamięci podręcznej i współdzielonych członków rozwiązują się do tożsamości źródeł i typowanych wartości |
lcoPivotCaches | Paruje lokalne typowane definicje PivotCache według tożsamości źródła i porównuje metadane odświeżania, metadane pól, pogrupowane etykiety i zakresy, nieuporządkowane domeny współdzielonych członków oraz uporządkowane typowane wartości rekordów; członkowie numeryczni, tekstowi, logiczni, datowi, błędy i pustki pozostają odrębni, daty zachowują precyzję binary64, a identyfikatory pamięci podręcznej i porządek slotów współdzielonych członków nie tworzą różnic |
lcoSlicerState | Paruje nazwane widoki slicerów i pamięci podręczne, włącznie z powiązaniami kolumn tabeli albo tabel przestawnych bez OLAP, nazwami połączonych tabel przestawnych, typowanymi zaznaczeniami członków, ustawieniami cross-filter i sortowania, podpisem, pozycją przewijania, układem kolumn, wymiarami, stylem, flagami blokady i podpisu oraz geometrią zakotwiczenia; powiązania rozwiązują identyfikatory tabel, kolumn, arkuszy i pamięci podręcznych |
lcoTimelineState | Paruje nazwane typowane widoki osi czasu i lokalne pamięci podręczne bez OLAP, włącznie z powiązaniami pola źródłowego i połączonej tabeli przestawnej, aktywnym wyborem dat, podpisem, poziomem i granicami arkusza; nieaktywne zaznaczenia pomijają nieużywane końce dat |
Options ma typ TlxCompareOptions, zbiór TlxCompareOption; włączenie opcji dodaje jej różnice do porównania domyślnego
SetFeatureLimits(MaxBytes, MaxItems) waliduje obie dodatnie limity przed zmianą któregokolwiek ustawienia; MaxFeatureBytes domyślnie ma 64 MiB, a MaxFeatureItems domyślnie 1 000 000, a pojedyncze settery zachowują tę samą atomową walidację
Budżety funkcji obejmują zagregowane odłączone kanoniczne bajty i zliczone wpisy z obu skoroszytów, włącznie z blokami rich-text, węzłami XML filtrów, polami tabel przestawnych, członkami domen i wartościami rekordów oraz połączeniami slicerów lub osi czasu; czytniki sprawdzają zliczenia i duże wejścia tekstowe przed budową natywnego XML, egzekwują ograniczone strumienie wyjścia i rzucają EXLSXSemanticBudget, gdy limit zostanie przekroczony
SetNumericTolerance(AbsoluteTolerance, RelativeTolerance) waliduje oba argumenty przed zmianą któregokolwiek ustawienia; oba muszą być skończone i nieujemne, a pojedyncze settery AbsoluteTolerancei RelativeTolerance używają tej samej walidacji
Literały numeryczne i numeryczne wartości pamięci podręcznej porównują się równo, gdy ich różnica bezwzględna wynosi co najwyżej AbsoluteTolerance albo ich różnica względem większej wartości bezwzględnej wynosi co najwyżej RelativeTolerance; próg zero zachowuje równość dokładną, obliczenie względne unika przepełnienia dla skrajnych wartości przeciwnych, a tolerancja nie koercuje tekstu i nie stosuje się do dat, stylów ani geometrii
LeftNamei RightName ustawiają opcjonalne nazwy wyświetlane używane przez linie Report, domyślnie lefti right; nazwy wpływają wyłącznie na raportowanie, nie na parowanie arkuszy ani porównanie
Comparer := TXLSXWorkbookCompare.Create;
try
Comparer.Options := [lcoFormulaCachedResults, lcoCellStyles,
lcoAxisGeometry];
Comparer.SetNumericTolerance(0.001, 0.000001);
DifferenceCount := Comparer.Compare(LeftWorkbook, RightWorkbook);
for I := 0 to DifferenceCount - 1 do
begin
Entry := Comparer.Diff(I);
ReportLines.Add(Entry.Describe);
end;
finally
Comparer.Free;
end;Compare zwraca liczbę różnic, Count odczytuje ją po fakcie, a Diff(Index) używa indeksowania od zera, by zwrócić należący do comparera TlxCompareDiff; zachowaj comparera podczas odczytu jego wpisów i nabyj wpisy ponownie po kolejnym udanym porównaniu
Każdy wpis dostarcza Kind, Sheet, jedno-bazowe Rowi Col tam, gdzie mają zastosowanie, Ref, LeftText, RightText oraz typowane wartości LeftKind / RightKind; TlxCompareValueKind zawiera lcvNone, lcvBlank, lcvNumber, lcvText, lcvBoolean, lcvDateTime, lcvErrori lcvFormula, przy czym lcvNone jest używane dla nieobecnej strony albo różnicy niebędącej wartością
TlxCompareKind zachowuje lckSheetAdded, lckSheetRemoved, lckCellAdded, lckCellRemoved, lckValueChanged, lckFormulaChanged, lckMergeAddedi lckMergeRemoved, a dodaje lckFormulaCacheChanged, lckStyleChanged, lckRowGeometryChangedi lckColumnGeometryChanged
Różnice stylów niosą stabilne kanoniczne odciski stylów w LeftTexti RightText; różnice geometrii niosą porównywany rozmiar, ukrycie, konspekt i stan zwinięcia, przy czym Ref identyfikuje dotknięty ciągły przedział osi, Row jest ustawiane na jego pierwszy wiersz, a Col na zero dla wierszy, albo Col na pierwszą kolumnę, a Row na zero dla kolumn
Różnice funkcji używają lckDefinedNameChanged, lckDataValidationChanged, lckConditionalFormatChanged, lckTableChanged, lckDrawingChanged, lckPivotTableChanged, lckPivotCacheChanged, lckSlicerChanged albo lckTimelineChanged; Change to lccChanged, lccAdded albo lccRemoved, a każda obecna strona niesie kanoniczny odcisk swojej definicji, podczas gdy nieobecna strona niesie pusty ciąg
lckRichTextChanged identyfikuje zmienioną definicję bloku na współrzędnych komórki i niesie kanoniczne odciski bloków w LeftTexti RightText; tolerancja numeryczna stosuje się do literałów komórek i pamięci podręcznych formuł, podczas gdy typowane definicje funkcji porównują się dokładnie
Odniesienia funkcji identyfikują nazwy z zasięgiem albo nazwy tabel, albo używają jedno-bazowych pozycji sekwencji dla definicji walidacji, formatowania warunkowego i rysunków; wstawienie albo przeniesienie uporządkowanej funkcji może zmienić kilka pozycji, a wpisy nazw poziomu skoroszytu mają pusty Sheet
lckBlankStyleRegionChanged identyfikuje zmieniony pusty prostokąt przez Row, Col, inkluzywne LastRowi LastCol oraz jego odwołanie A1 Ref; zapisane współrzędne obsługuje zwykłe porównanie komórek i lcoCellStyles, więc włącz obie opcje stylów, by przeglądać zapisane komórki i puste obszary razem
Describe formatuje jeden wpis, a Report(List) dopisuje sformatowane wpisy do należącego do wywołującego TStrings; typowana zmiana wartości zawiera etykiety typów, gdy typy się różnią, a wyniki sortują się według nazwy arkusza, wiersza, kolumny, rodzaju różnicy i odwołania, a nie porządku wstawiania komórek
Porównanie trzyma dzierżawy odczytu, przechodzi przez zapisane komórki z odłączonymi migawkami kursorów i zachowuje magazyn spakowany; geometria partycjonuje zapisane granice metadanych i zwarte rozpiętości powtarzanych wierszy, podczas gdy porównanie pustych stylów zamiata granice aktywnego prostokąta i zapisanych komórek bez skanowania prostokątnej milionowej siatki wierszy; praca rośnie z liczbą zapisanych funkcji, przecięć regionów i zgłoszonych różnic
Nieudane porównanie zachowuje poprzedni udany wynik; nieprawidłowe przypisanie tolerancji także zachowuje istniejące ustawienia i wynik, a przekazanie skoroszytu nil czyści wynik i zwraca zero
To porównanie pokrywa zapisaną zawartość komórek fasady XLSX i wybrane typowane definicje funkcji; pisownia formuł nazw, walidacji, formatowania warunkowego, tabel i wykresów normalizuje się przez semantyczny parser formuł, natomiast obliczeniowe formuły tabel przestawnych zachowują swój zapisany tekst definicji
Filtry tabel przyjmują obsługiwane postacie własne, listy wartości, grup dat, kolory, ikony, dynamiczne i top-count oraz warunki sortowania; niezależne kolumny filtrów i wpisy zbiorów wartości normalizują swój porządek, domyślne wartości logiczne i zapisy numeryczne się normalizują, a porządek warunków sortowania pozostaje istotny
Typowane porównanie tabel przestawnych, slicerów i osi czasu rozwiązuje obsługiwane lokalne źródła arkuszy i powiązania bez OLAP, bez odświeżania i bez wyliczania dostępności; natywne podpowiedzi dostępności slicerów to pochodne metadane wyświetlania, podczas gdy zaznaczenia członków i rozpoznane natywne metadane sortowania są porównywane
Nieprzejrzyste natywne właściwości rysunków, niekompletne binarne modele tabel przestawnych, zewnętrzne albo OLAP źródła tabel przestawnych, surowe rekordy uzupełnień tabeli przestawnej i XML rozszerzeń, nieznany XML filtrów oraz niemodelowane atrybuty albo dzieci rozszerzeń slicerów lub osi czasu rzucają EXLSSemanticSnapshot; zachowanie takich danych nie oznacza równoważności semantycznej
Wybrane zaimportowane funkcje tabel przestawnych i PivotCache walidują też zachowany natywny XML przed porównaniem projekcji typowanej, włącznie z zagnieżdżonymi metadanymi pól i rekordami pamięci podręcznej; nieznane przestrzenie nazw, atrybuty, dzieci i ładunki rozszerzeń zawodzą jawnie w ramach tych samych kooperatywnych limitów funkcji, podczas gdy modelowane powiązania pamięci podręcznej slicerów pozostają obsługiwane
TSimpleDomNode.RawName ujawnia oryginalny QName elementu obok znormalizowanego przez czytnik Name, pozwalając na inspekcję wrażliwą na przestrzenie nazw bez zmieniania istniejącego dopasowywania nazw parsera
Ustawienia skoroszytu i nieprzejrzyste metadane pakietu pozostają poza porównaniem; porównanie stylów bazowych nie wylicza wyglądu formatowania warunkowego ani stylów tabel, a porównanie rysunków zachowuje obsługiwane przez migawkę semantyczną granice obrazów, pól tekstowych, wykresów i uporządkowanych grup
Efektywne właściwości tekstu sformatowanego
TMsoFbtOpt.StoredPids zwraca zapisane identyfikatory właściwości OfficeArt w porządku posortowanym, a TMsoFbtSp.PersistentFlags ujawnia natywne flagi kształtu bez alokowania właściwości ani zakotwiczeń
TMsoShapeContainer.HasPreservedObjectData identyfikuje zachowane końcowe bajty OBJ; HasOrdinaryEmbeddedPictureObjectData sprawdza, czy końcówki obrazów zawierają wyłącznie rozpoznane rekordy formatów schowka i zerowe flagi obrazu, i odrzuca rekordy połączone albo nieznane bez kopiowania ładunku
TMSOShapeTextBox.HasValidTextRuns sprawdza zapisane granice bloków TXO i pola zarezerwowane bez tworzenia bloków; TMsoDrawing.HasUnmodeledAppearance identyfikuje natywne dane rysunków pominięte przez parser typowany, pozwalając przechwyceniu jawnie odrzucić nierozwiązany wygląd
TXLSXRichTextRun.BoldSet, ItalicSet, StrikethroughSet, UnderlineSet, VertAlignSeti ColorSet odróżniają odziedziczone właściwości czcionki od jawnych nadpisań, włącznie z flagami false, none, baseline i kolorami automatic; settery oznaczają właściwość jako jawną, nawet gdy jej wartość równa się początkowemu domyślnemu nowego bloku
TXLSXRichText.HasUnsupportedAppearance zgłasza natywne właściwości sformatowane, których model typowanego bloku nie potrafi przedstawić; przenośne przechwytywanie i efektywne porównanie rich-text odrzucają takie bloki jawnie, podczas gdy obsługiwane właściwości bloków współdzielonych/inline i whitespace zachowują zaimportowaną semantykę
Efektywne porównanie rich-text stosuje jawne nadpisania false przed scalaniem sąsiednich równych bloków; właściwości odziedziczone i jawnie wyzerowane pozostają odrębne podczas deduplikacji współdzielonych ciągów i obsługiwanych round-tripów XML
TXMLReader.ResolveNamespaceUri(Prefix, Uri) rozwiązuje bieżące wiązanie przestrzeni nazw w zasięgu bez zmieniania pozycji czytnika, zwracając false, gdy wiązanie nie istnieje; pusty prefiks żąda domyślnej przestrzeni nazw, a surowe QName pozostają dostępne dla inspekcji wrażliwej na przestrzenie nazw
Niemutowalne rekordy rich/scene, rozszerzenie źródła przechwytywania i kontrakt transferu HXRSNP02 są opisane w przenośnym wyjściu bezgłowym
Odłączona inspekcja stylów i osi
TXLSXWorksheet.ReadSemanticCellStyle(Row, Col) zwraca odłączony TXLSSemanticCellStyle dla poprawnych współrzędnych od jedynki, rozwiązując zapisane i spakowane style, domyślne wartości arkusza, mające zastosowanie nakładki stylów, dorozumiane formaty dat, kolory indeksowane i kolory motywu, bez materializowania komórek i bez zmieniania pul stylów; publiczne wywołanie nabywa dzierżawę odczytu i wyklucza reguły formatowania warunkowego oraz style tabel
TXLSXWorksheet.GetStoredAxisSpans(IsRow) zwraca TXLSXAxisSpans, tablicę rekordów TXLSXAxisSpan z inkluzywnymi FirstIndexi LastIndex od jedynki; zgłasza ślady metadanych rozmiaru, ukrycia, konspektu i zwinięcia, zachowuje zwarte rozpiętości powtarzanych wysokości wierszy i pozostawia efektywny domyślny stan arkusza dostępny przez jego zwykłe właściwości
Zwrócone rozpiętości opisują zapisane ślady metadanych, a nie rozłączną znormalizowaną partycję; aplikacje porównujące dwie osie mogą połączyć swoje granice pierwsze i ostatnie, a potem zbadać efektywny stan raz na powstały przedział
TXLSXWorksheet.GetStoredStyleRegions zwraca odłączone TXLSXStyleRegions zawierające inkluzywne granice FirstRow, FirstCol, LastRowi LastCol dla zwartych śladów wirtualnego formatowania; te ślady mogą się nakładać, a wywołujący odczytują efektywny wygląd przez ReadSemanticCellStyle
TXLSXWorkbook.ReadSemanticFeatures(Kind, Sheet, MaxBytes, MaxItems) zwraca odłączone wpisy TXLSXSemanticFeatures ze stabilnym Key, kanonicznymi bajtami Definition i zliczonym ItemCount; opcjonalne dodatnie limity domyślnie mają 64 MiB i 1 000 000 wpisów
TXLSXSemanticFeatureKind zawiera xlsxSemanticDefinedNames, xlsxSemanticDataValidations, xlsxSemanticConditionalFormats, xlsxSemanticTables, xlsxSemanticDrawings, xlsxSemanticPivotTables, xlsxSemanticPivotCaches, xlsxSemanticSlicers, xlsxSemanticSlicerCaches, xlsxSemanticTimelinesi xlsxSemanticTimelineCaches
Nazwy zdefiniowane i trzy rodzaje pamięci podręcznych używają zasięgu całego skoroszytu i dopuszczają arkusz nil; pozostałe rodzaje wymagają arkusza należącego do skoroszytu, reguły i rysunki zachowują swoją zapisaną sekwencję, a zwracane tablice i bufory są kopiami należącymi do wywołującego; te czytniki nabywają dzierżawy odczytu i dziedziczą opisane wyżej typowane pokrycie oraz jawne zachowanie wobec danych nieobsługiwanych
TXLSXWorksheet.ReadSemanticRichText(Row, Col, IncludePlainText, MaxBytes, MaxItems, ConsumedItems) zwraca odłączone kanoniczne bajty bloków dla współrzędnych od jedynki albo pusty bufor, gdy tekst sformatowany nie istnieje, a IncludePlainText jest false; opcjonalny ConsumedItems: PInteger otrzymuje liczbę przechwyconych bloków, a przechwytywanie zwykłego tekstu zachowuje magazyn spakowany
TXLSPivotCacheField.GroupItemTypes[Index] ujawnia typowany rodzaj odpowiadający GroupItemLabels[Index] i odrzuca indeks poza zapisaną domeną pogrupowanych etykiet
Metadane formuł i callbacki zapytań tabel przestawnych
TXLSGetCellFormulaTexti TXLSCalculator.OnGetCellFormulaText odczytują zapisany tekst wyrażenia przy jedno-bazowym SheetIndex i zero-bazowych Row/Col, zwracając lxOk albo typowany kod błędu i respektując ochronę ukrycia formuł; TXLSGetPivotTablei OnGetPivotTable lokalizują pożyczoną tabelę przy jedno-bazowym SheetIndex i zero-bazowych współrzędnych zakresu
Silniki skoroszytów podłączają te opcjonalne callbacki w kontekstach obliczeń zwykłych, tylko do odczytu i izolowanych; callbacki nie przeliczają celów, nie odświeżają źródeł tabel przestawnych i nie przenoszą własności
TXLSPivotDataConstraint przechowuje FieldNamei typowany Item, a TXLSPivotDataConstraints zbiera pary pole/element; TXLSPivotTable.GetDataValue odpytuje jeden widoczny obsługiwany agregat z odłączonej migawki lokalnej tabeli/pamięci podręcznej, a IntersectsQueryRange używa jedno-bazowych granic arkusza, włącznie z modelowanymi komórkami filtru raportu
TlxPivotQueryBudget synchronicznie otrzymuje szacunki pracy i pamięci oraz zwraca, czy wyliczanie może trwać dalej; EXLSPivotQueryBudgeti EXLSPivotQueryUnsupported rozróżniają wyczerpane limity od nieobsługiwanych modeli pamięci podręcznej albo agregatu
TXLSPivotCache.QueryModelIsComplete zapisuje gotowość zdekodowanego zapytania niezależnie od kompletności surowego replayu BIFF; QueryRecordsValid ujawnia ważność zaimportowanych rekordów, a SetQueryRecordValidity stosuje pierwszeństwo czytnika formatu bez odświeżania rekordów
Jawne bajty stron kodowych
| Składowa | Kontrakt |
|---|---|
XlsEncodeCodePage(Text, CodePage, MaxBytes = -1) | Zwraca RawByteString z dokładnymi bajtami w jawnej, niezerowej, zorientowanej bajtowo stronie, zachowuje osadzone nulle, weryfikuje tożsamość round-tripu Unicode i rzuca EConvertError dla tekstu nieprzestawialnego; nieujemne MaxBytes utrzymuje najdłuższy dopasowujący się prefiks kompletnych znaków, a -1 pozostawia długość nieograniczoną; walidacja obejmuje oryginalny tekst przed skróceniem |
XlsDecodeCodePage(Bytes, CodePage) | Zwraca WideString z jawnego kodowania bajtów i zachowuje osadzone nulle; zniekształcone sekwencje bajtów podążają za zachowaniem zainstalowanego dekodera; strona 0 i strona UTF-16 1200 są odrzucane, bo to API nie wnioskuje ANSI-owej strony lokalizacji ani nie obsługuje strumienia bajtów UTF-16 |
TXLSBlob.GetCompressedUnicodeString(Index, Count) | Zwraca dokładne jednostki kodowe skompresowanego Unicode BIFF8 od U+0000 do U+00FF, zachowuje osadzone nulle, waliduje żądany zakres bajtów i nie interpretuje tych bajtów stroną kodową |
TXLSBlob.AddRawString | Dopisuje dokładne zakodowane bajty bez konwersji strony kodowej AnsiString i aktualizuje DataLength; puste wejście nie dopisuje żadnych bajtów |
TXLSCalculator.CodePage, TXLSFormula.FCodePage | Wybierają jawne starsze kodowanie bajtów formuł, domyślnie CP1252; posiadający skoroszyt Classic synchronizuje swój kalkulator przy inicjalizacji albo przy wywołaniu SetCodePage |
TXLSFontList.GetFont, TXLSNumFormatList.GetNumFormatBlob, TXLSStyles.GetStyleBlob | Opcjonalny argument CodePage domyślnie ma 1252 i koduje tekst BIFF5; wyjście BIFF8 pozostaje Unicode |
TMsoDrawing.StoreNotes | Opcjonalny argument CodePage domyślnie ma 1252 i koduje tekst komentarzy sprzed Unicode; dotychczasowy limit rozmiaru rekordu zwykłych komentarzy BIFF5 pozostaje; nie dodaje to pól autora, rich-text ani geometrii nieobecnych w tym formacie rekordu |
TXLSCustomName.SetSourceData | Opcjonalne argumenty FileFormati CodePage identyfikują zaimportowane surowe bajty NAME i domyślnie mają xlExcel97 oraz 1252; surowe rekordy są ponownie używane wyłącznie wtedy, gdy ich format i starsze kodowanie pasują do żądanego wyjścia |
TXLSFormulatArrayItem.GetDataSize, TXLSFormulatArray.GetDataSize, TXLSFormulatArray.GetData, TXLSFormulatArrays.GetDataSize, TXLSFormulatArrays.GetData, TXLSCompiledFormula.GetExternalData | Opcjonalny argument ACodePage domyślnie ma 1252; rozmiar i wyjście starszych tablic ciągów używają tej samej liczby zakodowanych bajtów, podczas gdy ciągi BIFF8 pozostają Unicode |
Przekaż zwrócony RawByteString bezpośrednio do AddRawString albo zorientowanej bajtowo operacji strumienia; przekonwertowanie go na domyślny AnsiString może przekodować jego bajty na natywnych systemach FPC
Klasyczne nazwy zdefiniowane i bloki formuł tablicowych
TXLSCustomName deferred compilation | ClearDefinition zwalnia skompilowane AST RefersTo, zachowując zapisany ciąg definicji i ewentualne surowe zaimportowane bajty NAME, Compile przebudowuje AST z zapisanej definicji i zgłasza sukces, a GetCompiledFormula kompiluje automatycznie, więc wyczyszczona nazwa rozwiązuje się ponownie przy następnym odczycie; PeekCompiledFormula zwraca bieżące AST bez wyzwalania tej rekompilacji, a StoredDefinition ujawnia nieparsingowane źródło definicji |
TXLSCustomName identity and flags | StoreIndex ujawnia pozycję magazynową nazwy w jej kolekcji, NameID jej numeryczną tożsamość unikatową w skoroszycie używaną przez silnik obliczeń, a IsHiddeni IsMacro odczytują i zapisują flagi hidden i macro rekordu BIFF NAME |
TXLSFormulatArray.RowsCount, ColsCount | Zgłaszają rozpiętości wierszy i kolumn sparsowanego bloku formuł tablicowych; obie startują od jedynki i ograniczają domenę elementów per komórkę niesioną przez metody emisji |
Klasyczne pule czcionek, formatów i stylów
TXLSFontList stored font attributes | Właściwości indeksowane odzwierciedlają zapisany klucz czcionki na indeksie listy od zera: Name, Size, ColorIndex, Bold, Italic, Strikethroughi Underline dołączają do OutLineFont, Shadow, SubScript, SuperScript, Familyi CharSet dla inspekcji tylko do odczytu |
TXLSNumFormatList.AddValue, FmtExists | AddValue rejestruje ciąg formatu i zwraca jego indeks, mapując wbudowane zapisy formatów na ich kanoniczne identyfikatory i oznaczając formaty daty i czasu; FmtExists zgłasza, czy niestandardowy ciąg formatu jest już zarejestrowany |
TXLSNumFormatList.IsDateFormat, IsDateFormatValue | IsDateFormat zgłasza, czy format zapisany pod danym indeksem jest oznaczony jako format daty albo czasu, a IsDateFormatValue testuje bezpośrednio ciąg formatu pod kątem tokenów daty i czasu |
TXLSStyles.AddStyle, AddBuiltinStyle | AddStyle rejestruje nazwany własny styl komórki związany z indeksem rekordu XF, a AddBuiltinStyle rejestruje wbudowany styl komórki według jego wbudowanego identyfikatora wraz z poziomem konspektu używanym przez style poziomu wierszy i kolumn |
TXLSStyles.BuiltinStyleName | Funkcja klasowa zwracająca kanoniczną wbudowaną nazwę wyświetlaną stylu komórki Excela dla wbudowanych identyfikatorów od 0 do 53; identyfikatory poza zakresem zwracają pustą nazwę, więc zapisujący spadają na surową postać bajtów builtin |
Pomocnicze funkcje pakietu i magazynu binarnego
TXLSXOpaquePackage | LoadWorkbookXmlMetadata przechwytuje stan XML poziomu skoroszytu, MarkAllPartsClean resetuje flagi zmienności, a WorkbookExtLstXml wraz z WorkbookRootAttributesXml udostępniają zachowane fragmenty XML skoroszytu; IsDiscardedPart zgłasza, czy nazwa części została usunięta operacją odrzucenia, taką jak czyszczenie dodatków internetowych |
TXLSFileStorage | Load, LoadFolder, Writei WriteFolder przenoszą zawartość pliku złożonego; Child i Count wyliczają wpisy podrzędne, z których każdy jest TXLSFileItem — nazwanym węzłem magazynu, którego podklasa TXLSFileStream przenosi zapisane bajty jako TXLSBlob z DataSize zgłaszającym długość ładunku |
TXLSBlob | Add dołącza inny blob, a AddByte, AddWord, AddLong, AddDouble, AddStringi AddWideString dołączają wartości typowane; CopyData, CopyMem, FillByte, Write, Clear, Reseti Dump zarządzają zawartością; Buff i DataLength udostępniają magazyn |
TXLSBlobList | Append, AppendList, CopyDatai Write łączą lub emitują wpisy; Entries i TotalSize udostępniają stan listy |
TXLSWideStringBuilder | AddString dołącza tekst, a Length zgłasza skumulowaną liczbę znaków |
Dodatki do rysowania i przeglądarki skoroszytów
TXLSFillFormat | PictureFill konfiguruje wypełnienie kształtu oparte na obrazie, a FillType wybiera rodzaj wypełnienia (jednolite, gradientowe, obraz lub wbudowana tekstura), które zapisuje twórca wyjścia |
TXLSShapes | AddScrollBar i AddSpinner tworzą kontrolki formularzy — zwracane obiekty TXLSScrollBar i TXLSSpinner udostępniają geometrię kontrolki i powiązaną komórkę, a spinner dodaje limity kroku Min, Maxi Inc — natomiast RegisterScrollBar i RegisterSpinner rejestrują kontrolki wczytane ze skoroszytu |
TXLSWorkbookViewer | CanUndoi CanRedo zgłaszają dostępność historii transakcji; ClearSelectedRange, CopySelectedRange, PasteSelectedRangei PasteText działają na zaznaczonym zakresie, a ReferencePickMode włącza interaktywny wybór odwołania do komórki lub zakresu |
TXLSWorkbookEditHistory | Silnik transakcji zawartości bezgłowej w lxWorkbookViewer wiąże pożyczony skoroszyt klasyczny albo XLSX i dostarcza preflight ochrony zakresów, kopiowanie i wklejanie tekstu Unicode, czyszczenie zakresu oraz jedną transakcję undo/redo na operację; zobacz transakcje edycji bezgłowej |
TXLSCellContentSnapshot | Obie klasy arkuszy ujawniają ReadCellContent(Row, Col)i RestoreCellContent(Snapshot) dla odłączonego natywnego przechwytywania i przywracania zawartości przy współrzędnych od jedynki w arkuszu pochodzenia; przechwycenie nie wylicza formuł, nie tworzy nieobecnych komórek i nie materializuje magazynu spakowanego, a niemutowalny ładunek NativeData zachowuje tekst sformatowany, pamięci podręczne formuł i styl komórki; bezpośrednie przywracanie to operacja niskopoziomowa, której wywołujący musi walidować ochronę i granice strukturalne |
Paginacja, wyjście obrazowe i drukowanie
XLSValidateCachedChartSceneModel, XLSRecordCachedChartScene | Przelatuje preflight metadanych zapamiętanych wykresów bez rozwiązywania komórek i rejestruje ograniczone prymitywy wektorowe i tekstowe dla odłączonego wykresu w lxPortableChart, zwracając TXLSPortableSceneObjects oraz rozliczenia elementów, bajtów i tekstu; punkty wejścia lxPagination zachowują tę samą współdzieloną implementację dla istniejących wywołujących Windows; obecny podzbiór obejmuje zwykłe wykresy kolumnowe, słupkowe, liniowe, punktowe, kołowe, pierścieniowe i warstwowe z jedną serią oraz jedną podstawową grupą wykresu, a rejestracja wymaga walidowanych natywnych metadanych, skończonych ściśle uporządkowanych punktów pamięci podręcznej i niepodpiętego modelu wykresu; zobacz rejestrację zapamiętanych wykresów |
TXLSGraphicsBackend | DrawTiledImage powtarzalnie maluje tło arkusza na przyciętym obszarze strony |
TXLSPaginationModel | CompactRangeMode, IncludeDrawings, IncludeGridlines, IncludeCellBordersi PaintPageBackground sterują zawartością strony; RenderDPI, RenderColorModei RenderSession udostępniają rozdzielczość wyjścia, obsługę kolorów i aktywną sesję renderowania |
TXLSCellImageExporter | Measure oblicza wymiary w pikselach dla zakresów klasycznych lub XLSX; ImageFormat, JpegQuality, MaxPixels, MaxBytes, IncludeObjects, IncludeGridlines, IncludeCellBorders, BackgroundColor, TransparentBackground, BeforePaint, AfterPainti PaginationModel konfigurują i obserwują renderowanie |
TXLSPageImageExporter | BeforePaint, AfterPaint, MaxPixels, MaxBytes, BackgroundColori TransparentBackground stosują te same zaczepienia malowania i limity bezpieczeństwa wyjścia do eksportu obrazu stronicowanego |
TXLSPrintDocument | PrintWorksheet, PrintWorkbooki PrintAllVisibleSheets wysyłają zawartość klasyczną lub XLSX do drukarki VCL; FirstPage, PrintRangeOnly, Collate, Copies, OnBeforeNewPagei OnAfterGeneratePage sterują zadaniem drukowania |
Modele wykresów klasycznych i obiekty wykresów arkusza
TXLSXChartSeries | LineVisible, LineColorRGBi LineWidthPoints opisują niezależny obrys serii; LineStyleSet, LineColorSeti LineWidthSet zachowują ustawienia jawne, a EffectiveLineVisible rozwiązuje starszą konwencję wyłącznie-wypełnienia; MarkerFillSeti MarkerBorderSet rozróżniają jawną czerń od automatycznych kolorów znaczników, przy czym przenośna rejestracja linii i punktowych wspiera średnice okręgów od 2 do 72 punktów; settery koloru i szerokości walidują przed mutacją i respektują dzierżawy odczytu skoroszytu |
TXLSChartSeries | AddTrendlinei AddErrorBars tworzą typowane adnotacje serii, a TrendlineCounti ErrorBarCount zgłaszają rozmiary tych kolekcji; istniejące pole MarkerSize zachowuje surowe twipsy BIFF, podczas gdy getter tylko do odczytu MarkerSizePoints zwraca tę wartość podzieloną przez 20, włącznie z ułamkowymi rozmiarami w punktach |
TXLSChartAxis | HasAxcExtFlag testuje jeden surowy znacznik AXCEXT bez wymagania od wywołujących dekodowania maski bitów |
TXLSChartModel | AxisGroupCount zgłasza liczbę podstawowych i pomocniczych grup osi zdekodowanych z wykresu |
TXLSCustomChart | AddAreaData dołącza gotowy element obszarowy na potrzeby ponownego wiązania formuł przy zapisie, a ApplyDateAxisModel nakłada typowany model osi dat na surowe rekordy wykresu; GetStoredRecordInfo odczytuje zero-bazowy identyfikator rekordu i liczbę bajtów bez alokacji, a ReadStoredRecord(Index, MaxBytes) sprawdza limit bajtów przed zwróceniem odłączonych bajtów w TXLSChartStoredRecord, bez wyliczania formuł i bez modyfikowania pamięci podręcznych |
TXLSWorksheet | AddChartObject zakotwicza ramkę wykresu na arkuszu i łączy ją ze współdzielonym kreatorem wykresów |
TXLSXChartLayoutResolver | TryResolve rozwiązuje jeden prostokąt układu z opcjonalną walidacją rozmiaru, a ResolveChart oblicza prostokąty wykresu, tytułu, legendy, obszaru wykresu i osi |
Typowany model dekodowania wykresów
Zdekodowany stan wykresu jest udostępniany jako zwykłe rekordy i typy wyliczeniowe, więc kod inspekcji nigdy nie musi przechodzić przez surowe rekordy BIFF: TXLSChartInfo niesie zdekodowane podsumowanie wykresu z TXLSChartTypeFamily (cfBar, cfLine, cfPie, cfArea, cfScatter, cfRadar, cfDoughnut, cfSurface, cfBubble), każda seria zgłasza TXLSChartSeriesType, a TXLSChart3DState wraz z TXLSChart3DInfo opisują widoki trójwymiarowe. TXLSChartAxisType (catCategory, catValue, catSeries, catDate) i TXLSChartLegendPosition klasyfikują osie i legendy, a model osi dat używa TXLSChartDateUnit (xcduDays, xcduMonths, xcduYears) i TXLSChartDateValues. TXLSCustomChart udostępnia zdekodowany model przez TXLSChartInfo; adnotacje linii trendu i słupków błędów są typowanymi obiektami (TXLSChartTrendline, TXLSChartErrorBars) osiągalnymi z każdej serii
Rekordy tworzenia wykresów
Tworzenie arkuszy wykresów i pracy z kreatorem przyjmuje zwykłe rekordy zamiast grafów obiektów: TXLSChartTrendlineInfo, TXLSChartErrorBarsInfo, TXLSChartDataLabelsInfoi TXLSChartSeriesStyleInfo wypełniają wpisy serii przekazywane do TXLSWorksheets.AddChartSheet i współdzielonego kreatora wykresów, a TXLSPivotChartInfo opisuje oprawę wykresu przestawnego używaną, gdy wykres jest podpięty do tabeli przestawnej
Inspekcja wypełnień wykresów klasycznych
TXLSCustomChart.GetChartModel dekoduje obsługiwane natywne tabele właściwości OfficeArt i trzeciorzędowe tabele właściwości w rekordach GelFrame, włącznie z właściwościami następującymi po złożonych wpisach ładunków; istniejąca reprezentacja kreatora pozostaje obsługiwana, a zniekształcone granice tabel pozostawiają poprzednie typowane wypełnienie bez zmian i zgłaszają nieobsługiwany rekord
Inspekcja wykresów waliduje kompletny zapisany ładunek tekstu i adnotacji przed dodaniem typowanego stanu: skrócone nazwy linii trendu albo separatory etykiet danych zgłaszają swój identyfikator rekordu przez _UnsupportedSemanticRecordID, a nagłówki SeriesText nil albo za małe zgłaszają ten rekord jako nieobsługiwany zarówno dla BIFF5, jak i BIFF8; zadeklarowana rozpiętość tekstu serii przekraczająca swój ładunek rzuca EReadError, zwalnia częściowy model i pozostawia zapisane rekordy wykresu bez zmian
Getter znaczników i inspekcja wypełnień zachowują surowy magazyn wykresu; ścieżka przechwytywania zadeklarowanego wyglądu waliduje osobno obsługiwane wykresy rdzeniowe, podczas gdy niezweryfikowane sumy kontrolne rozszerzeń bogatych tytułów albo kształtów pozostają nieobsługiwane
Ograniczone czytniki zapisanych wykresów, ciągów i czcionek
TXLSChartStoredBytes to odłączona tablica bajtów, a TXLSChartStoredRecord zawiera RecordIdi Data; te czytniki badają zachowany magazyn źródłowy bez tworzenia zdekodowanego modelu wykresu i bez wyliczania formuł
| TXLSCustomChart.GetStoredRecordInfo | Zwraca identyfikator rekordu i zliczoną długość bajtową dla zero-bazowego indeksu rekordu, bez kopiowania jego ładunku |
| TXLSCustomChart.ReadStoredRecord | Kopiuje jeden ładunek po walidacji indeksu i nieujemnego MaxBytes; domyślny limit bajtów to High(Int64) |
| TXLSCustomChart.ReadStoredFormulaLeafInfo | Bada spójny zapisany liść BRAI używając dokładnego kalkulatora źródłowego oraz nieujemnych kwot bajtów i tekstu; obce kalkulatory albo właściciele tłumaczeń zwracają nieobsługiwany liść, a AllowUnboundBiff domyślnie ma False |
| TXLSCustomChart.ReadStoredFormulaLiteral | Zwraca odłączony literał dopiero po tych samych kontrolach proweniencji i kwot; nieobsługiwany liść rzuca EInvalidOperation |
| TXLSCustomChart.SourceBiffVersion, SourceCodePage | Tylko do odczytu proweniencja zachowanych rekordów wykresu |
| TXLSStringTable.GetStoredStringLength, ReadStoredString | Zlicza istniejący magazyn UTF-16 używając jedno-bazowej tożsamości ciągu tabeli, a potem kopiuje dopiero, gdy nieujemna kwota znaków ją obejmuje; nieprawidłowe tożsamości i niekompletny magazyn UTF-16 są odrzucane |
| TXLSFontList.GetStoredNameLength, ReadStoredName | Sprawdza zapisany klucz czcionki na zero-bazowym indeksie listy przed zliczeniem albo skopowaniem jej nazwy w ramach nieujemnej kwoty znaków |
| TMsoFbtOptItem.HasStoredUnicodeString | Sprawdza ograniczone zapisane metadane złożonych ciągów Unicode bez materializowania ciągu |
| TMsoShapeContainer.HasOrdinaryChartObjectData | Sprawdza zapisany rodzaj obiektu wykresu, niezerową tożsamość obiektu, obsługiwane flagi i brak nieznanych danych końcowych obiektu |
Utrzymanie tabeli ciągów współdzielonych i emisja SST
TXLSStringTable w lxStringTable podpiera ciągi współdzielone skoroszytu klasycznego; poniższe składowe pokrywają rejestrację po stronie czytnika, utrzymanie slotów i surową emisję SST dla zapisów round-trip
KeyExists, AddWithExtras | KeyExists zgłasza, czy ciąg już zajmuje slot; AddWithExtras to towarzysz po stronie czytnika Add, który przypina surowy ładunek rich-text rgRun i fonetyczny rgExtRst do wpisu bez podnoszenia jego licznika odwołań, bo każda odwołująca się komórka przywraca później licznik przez normalną ścieżkę dodawania |
Replace, ReplaceIndex | Replace zrzuca jedno odwołanie na starym slocie, zwalniając go, gdy licznik spadnie do zera, i ponownie dodaje tekst, zwracając powstały slot; ReplaceIndex przenosi jedno odwołanie ze starego slotu do nowego bez kopiowania tekstu |
AddSSTData, InitExtIndex | AddSSTData emituje surowy ładunek SST do listy blobów zapisującego; przeciążenie przyjmujące tabelę przemapowania bloków czcionek przepisuje każdy indeks czcionki FormatRun na wyjściu ([MS-XLS] §2.5.129), tak by bloki rich podążały za przemapowaniem czcionek przy zapisie, a pusta tabela zachowuje historyczną emisję dosłowną; InitExtIndex numeruje kubełki ExtSST nad żywymi slotami przed emisją |
SlotCount, ExtIndex, ParsedExtSSTDsst, ParsedExtSSTItemCount, BiffSizeLimit | SlotCount to jedno-bazowa górna granica iteracji slotów, przy czym usunięte sloty czytają się jako puste, ExtIndex rozwiązuje slot do numeru kubełka ExtSST albo -1 dla slotu nieżywego, ParsedExtSSTDssti ParsedExtSSTItemCount zachowują zaimportowane wartości nagłówków EXT/SST, a BiffSizeLimit ogranicza każdy emitowany fragment rekordu — zapisujący klasyczny ustawia go na 2080 bajtów dla BIFF5 i 8224 dla BIFF8 |
Załączniki PDF, podpisy i eksport HTML
IXLSPDFAttachmentSource | WriteTo strumieniuje bajty załącznika do eksportu PDF bez wymagania, aby eksporter był właścicielem danych źródłowych |
TXLSPDFExport | AttachmentDuplicatePolicy wybiera obsługę zduplikowanych nazw, AttachmentSpoolThreshold steruje szpulowaniem załączników, a DocumentLanguage zapisuje metadane języka dokumentu |
TXLSPDFSignature | TextAlign, TextSize, TextColor, TextBoldi TextItalic konfigurują widoczny wygląd podpisu |
TXLSHTMLExport | ViewMode (typ TXLSHtmlViewMode: bieżący widok lub pełna tabela arkusza) wybiera prezentację HTML, a HotTrackTargets (zbiór TXLSHtmlHotTrackTarget) i HotTrackColor konfigurują interaktywne podświetlanie komórek i obiektów |
TXLSXHtmlExportOptions | ViewMode, HotTrackTargetsi HotTrackColor zapewniają równoważne opcje eksportu HTML dla XLSX |
Audyt obliczeń i kontrolki skoroszytu
TXLSCalculationAuditReport | Truncated zgłasza skrócenie z powodu limitu problemów, StackTruncated — skrócenie ramek stosu wywołań, a Issues indeksuje zapisane problemy obliczeń |
TXLSUserFunctionRegistry | Generation zmienia się przy każdej zmianie zarejestrowanego zbioru funkcji użytkownika, co pozwala unieważniać zapamiętane powiązania formuł |
EXLSReportRecoverableData | Category identyfikuje kategorię odzyskiwalnych danych raportu przedstawianą wywołującemu |
IXLSWorkBook | ManualCalculationThreadCount ogranicza liczbę wątków roboczych używanych przez obliczanie ręczne |
TXLSXDataValidation | HasUnknownImeMode zgłasza wartość trybu IME, którą HotXLS zachował, ale nie rozpoznaje |
TXLSXTable | ColumnCalculatedFormulaArrayRaw i ColumnTotalsFormulaArrayRaw udostępniają oryginalny tekst formuł tablicowych dla kolumn tabeli |
Zgodność ze starszą oprawą PivotCache
TXLSPivotCache | RawBucketIndex identyfikuje pozycję podstrumienia źródłowego, RawFramingIsLegacy identyfikuje starszą oprawę HotXLS, RawModelIsComplete zgłasza, czy typowany model reprezentuje każdy rekord, a CanUpgradeFraming — czy opt-inowa ponowna emisja typowana jest bezpieczna |
TXLSPivotCache | StreamId udostępnia tożsamość strumienia klasycznej pamięci podręcznej, SourceDataType — typ klasycznych danych źródłowych, a RawHasStorageStream zgłasza, czy wczytana pamięć podręczna pochodziła z niezależnego strumienia magazynu PivotCache |
TXLSWorkbook | UpgradeLegacyPivotCacheFraming włącza przepisywanie wyłącznie starszych opraw pamięci podręcznej HotXLS, których typowany model jest kompletny; zwykłe odtwarzanie surowej pamięci podręcznej pozostaje domyślne |
StreamId jest zapisywany jako rekord SXStreamID ([MS-XLS] §2.4.303) i powtarzany jako pole SXDB nagłówka idstm , które musi mu być równe; SourceDataType jest zapisywany jako rekord SXVS ([MS-XLS] §2.4.317: $0001 arkusz, $0002 zewnętrzny, $0004 konsolidacja, $0010 scenariusz) i powtarzany jako pole SXDB nagłówka vsType , które musi mu być równe. Pamięci podręczne zbudowane z zakresu arkusza startują z typu arkusza, natomiast pamięci podręczne odczytane z pliku zachowują wartość niesioną przez swój podstrumień, więc twórca BIFF nigdy nie zostawia w polu SXDB nazwy rekordu, którego nie wyemitował; RawHasStorageStream oznacza pamięć podręczną wczytaną z własnego strumienia magazynu, której globalny deskryptor skoroszytu poprzedza zbuforowane rekordy
Integracja ze schowkiem i opcje wklejania
TXLSPasteOption = (xlpoValuesOnly, xlpoInsertRows, xlpoInsertCols);
TXLSPasteOptions = set of TXLSPasteOption;
function XLSGetClipboardText: WideString;
function XLSSetClipboardText(const Text: WideString): Boolean;
function XLSSetClipboardTextAndHtml(const Text: WideString;
const Html: AnsiString): Boolean;
function XLSBuildHtmlClipboard(const Html: AnsiString): AnsiString;
function XLSEncodeClipboardField(const Text: WideString): WideString;
function XLSClipboardHasText: Boolean;
function XLSParseClipboardGrid(const ClipboardText: WideString;
Loader: TXLSCSVLoader): Boolean;
function XLSClipboardHasXmlSpreadsheet: Boolean;
function XLSGetClipboardXmlSpreadsheet: WideString;
function XLSParseXmlSpreadsheet(const XmlText: WideString;
Loader: TXLSCSVLoader): Boolean;
function XLSClipboardHasBiff8: Boolean;
function XLSGetClipboardBiff8: AnsiString;
function XLSReadClipboardPasteData(out Biff8: AnsiString;
out Text: WideString): Boolean;
function XLSSetClipboardBiff8(const Biff8: AnsiString;
const Text: WideString; const Html: AnsiString = ''): Boolean;
PasteFromClipboard obu fasad: xlpoValuesOnly zachowuje wartości z pamięci podręcznej komórek z formułami i pomija formaty oraz scalenia, a xlpoInsertRows i xlpoInsertCols przesuwają istniejącą zawartość, zanim blok trafi na miejsceCF_UNICODETEXT (z fallbackiem do CF_TEXT przez bieżącą stronę kodową ANSI), XLSSetClipboardTextAndHtml zapisuje tekst i stylowany ładunek HTML Format w jednej transakcji, XLSBuildHtmlClipboard wylicza bajtowe offsety CF_HTML dla dokumentu lub fragmentu, a XLSEncodeClipboardField cytuje jedno pole rozdzielane tabulatorami. XLSParseClipboardGrid analizuje tekst ze schowka jako wiersze rozdzielane tabulatorami z tym samym rozpoznawaniem typów, którego TXLSCSVLoader używa dla CSV, XLSParseXmlSpreadsheet przeprowadza to samo wypełnienie loaderem na ładunku SpreadsheetML 2003 pobranym przez XLSGetClipboardXmlSpreadsheet, a funkcje Biff8 wykrywają i czytają natywny strumień, który Excel sam kładzie na schowku, więc wklejone dane zachowują wartości, formuły i formatowanie bez utraty tekstuXLSReadClipboardPasteData przechwytuje strumień Biff8 i tekst Unicode pod jedną blokadą schowka, więc wklejanie nie musi otwierać schowka ponownie między dwoma odczytami i nie traci żadnego z formatów na rzecz konkurenta. XLSSetClipboardBiff8 to pasująca strona zapisu: kładzie w jednej transakcji strumień dokumentu złożonego BIFF8, tekst Unicode rozdzielany tabulatorami i opcjonalny ładunek CF_HTML — pusty Text albo Html pomija dany format towarzyszący, a część Biff8 jest wymaganaRozwiązywanie tekstu wyświetlanego komórki
TXLSCellDisplayMode = (xcdmFormattedValue, xcdmFormulaText,
xcdmSuppressedZero);
TXLSCellDisplayOptions = record
ShowFormulas: Boolean;
ShowZeros: Boolean;
SheetProtected: Boolean;
FormulaWidthFactor: Double;
DateSerialZero: Double;
end;
TXLSCellDisplayInput = record
HasFormula: Boolean;
FormulaHidden: Boolean;
IsNumericZero: Boolean;
FormulaText: WideString;
FormattedText: WideString;
end;
TXLSCellDisplayResult = record
Mode: TXLSCellDisplayMode;
Text: WideString;
TreatAsText: Boolean;
EffectiveWidthFactor: Double;
end;
function XLSDefaultCellDisplayOptions: TXLSCellDisplayOptions;
function XLSNormalizeFormulaDisplayText(const FormulaText: WideString): WideString;
function XLSResolveCellDisplay(const Options: TXLSCellDisplayOptions;
const Input: TXLSCellDisplayInput): TXLSCellDisplayResult;
XLSResolveCellDisplay bezpośrednio z własnymi rekordami wejściowymi; XLSDefaultCellDisplayOptions zwraca kanoniczne wartości domyślne, a XLSNormalizeFormulaDisplayText normalizuje ciąg formuły do wyświetleniaObiekty sprawdzania poprawności danych klasycznego XLS
TXLSDataValidationType = (xlsDvAny, xlsDvWhole, xlsDvDecimal, xlsDvList,
xlsDvDate, xlsDvTime, xlsDvTextLength, xlsDvCustom);
TXLSDvErrorStyle = (xlsDvErrStop, xlsDvErrWarning, xlsDvErrInformation);
TDVRange = class; { one validation rule over one or more ranges }
TDVRangeList = class; { the per-sheet rule collection }
TDataValidator = class; { engine that checks edits against the rules }
TXLSWorksheet.Add*Validation tworzą reguły TDVRange w liście TDVRangeListarkusza; każda reguła niesie swój TXLSDataValidationType, granice, komunikaty wejściowe i błędów oraz TXLSDvErrorStyle. TDataValidator ocenia edycję względem reguł i zgłasza, czy wartość jest akceptowalna — to samo sprawdzenie stoi za monitami sprawdzania poprawności samego ExcelaSkanowanie i rozwiązywanie kolorów indeksowanych
TXLSIndexedColorKind = (xickPalette, xickAutomatic, xickSystem, xickInvalid);
TXLSSystemColorRole = (xscrNone, xscrWindowText, xscrWindowBackground,
xscrChartText, xscrChartBackground, xscrChartNeutral, xscrToolTipText);
TXLSIndexedColorResolution = record
Kind: TXLSIndexedColorKind;
RawIndex: Int64;
PaletteSlot: Integer;
SystemColorRole: TXLSSystemColorRole;
ARGB: LongWord;
HasResolvedColor: Boolean;
end;
TXLSNearestIndexedColorMatch = record
InputARGB: LongWord;
ColorIndex: Integer;
PaletteSlot: Integer;
ARGB: LongWord;
DistanceSquared: Double;
ExactMatch: Boolean;
end;
TXLSIndexedColorUsageKind = (xicukFont, xicukFillForeground,
xicukFillBackground, xicukGradient, xicukBorder, xicukConditionalFormat,
xicukChart, xicukShape, xicukComment, xicukWorksheet, xicukOther);
ResolveIndexedColor, NearestIndexedColori ScanIndexedColorUsage : rozwiązanie zgłasza, z którego z czterech źródeł TXLSIndexedColorKind pochodzi token indeksowany, wraz ze slotem palety, rolą koloru systemowego i znormalizowanym ARGB, dopasowanie najbliższe dodaje kwadrat odległości RGB i flagę trafienia dokładnego, a skan użycia znacznikuje każdą kategorię konsumenta zajmującą slot palety. Biblioteka utrzymuje wewnętrzną pamięć podręczną TXLSIndexedColorMatcher kluczowaną generacją palety — FindNearest odpowiada na zapytania o najbliższy kolor z tej pamięci, a UpdateSlot łata jeden slot palety — więc powtarzane rozwiązania pozostają bez alokacjiFunkcje pomocnicze odwołań A1
function XLSA1CellRef(ARow, ACol: Integer): WideString;
function XLSTryParseA1CellRef(const ARef: WideString;
out ARow, ACol: Integer): Boolean;
function XLSTryParseA1RangeRef(const ARef: WideString;
out ARow1, ACol1, ARow2, ACol2: Integer): Boolean;
False dla wadliwego wejścia zamiast zgłaszać wyjątek