Dokumentacja HotXLS

Formuły i obiekty arkuszy XLSB

Fasada skoroszytu XLSX czyta i zapisuje zwalidowany podzbiór XLSB z typowanymi wartościami, zwykłymi zapamiętanymi formułami, nazwami, wspólnymi stylami i reprezentowanymi obiektami arkusza; stan nieprzedstawialny jest odrzucany przed wyjściem do celu

Otwieranie i zapisywanie

if Workbook.Open('values.xlsb') <> 1 then
  raise Exception.Create('XLSB input is unsupported or invalid');
if Workbook.SaveAsChecked('values-copy.xlsb', xlsxExcelBinaryWorkbook) <> 1 then
  raise Exception.Create('XLSB output is unsupported or failed');

Open wykrywa treść i zarejestrowany typ części skoroszytu; udane wejście binarne ustawia SourceFormat=xlsxExcelBinaryWorkbook, podczas gdy pierwotne cztery porządki TXLSXFileFormat pozostają bez zmian, a nowy składnik ma porządek 4

Przeciążenia plikowe i strumieniowe SaveAs i SaveAsChecked przyjmują format binarny jawnie; domyślny zapis nadal wybiera zwykły format skoroszytu Open XML niezależnie od rozszerzenia nazwy pliku

GetConversionReport(xlsConversionExcelBinaryWorkbook) bada bieżący stan bez rozwijania spakowanego zapisu komórek; nieobsługiwane wpisy pozostają obowiązkowymi błędami nawet przy zapisie niesprawdzanym albo AllowLossy=True

Obsługiwany stan

Raport konwersji obejmuje funkcje żywego modelu, a kompletna walidacja pakietu pozostaje ostateczną bramą dla nieprawidłowych odwołań, zniekształconych rekordów, nieznanych atrybutów albo nieobsługiwanej zachowanej treści

Import binarny zachowuje jawny domyślny font pliku i obsługiwane wbudowane formaty liczb, łącznie z pustymi sformatowanymi komórkami; formaty liczb zależne od ustawień regionalnych wymagają jawnego kodu formatu, aby czytnik nie zgadywał formatowania regionalnego

Jawne granice

Rekordy formuł współdzielonych, własność tablic i tablic dynamicznych, stałe tablicowe i funkcje zwracające tablice, funkcje przyszłe, funkcje zdefiniowane przez użytkownika, odwołania między skoroszytami i wieloarkuszowe, VBA, zewnętrzne połączenia danych, tabele przestawne i Slicery, wykresy i rysunki, komentarze i rich text, walidacja, formatowanie warunkowe oraz zaawansowane metadane strony albo rozszerzeń pozostają poza tym backendem

Obliczeniowe kolumny tabel, formuły agregacji sum, stan sortowania, różnicowe albo niestandardowe formatowanie tabeli, tabele związane z zapytaniami i mapowania XML są odrzucane; filtry kolorów, ikon, dynamiczne i grup dat, typowane natywne Boolean kryteria niestandardowe, wyglądające liczbowo natywne kryteria tekstowe niestandardowe i nadpisania widoczności przycisku filtra też są odrzucane

Zaimportowane niestandardowe kryteria filtrów arkusza są zachowywane jako RawXml; porównania niestandardowe wypełniają istniejące typowane właściwości kryteriów, podczas gdy wybrane wartości i wybór pustych pozostają kryterium opartym na XML, a nie nowym typowanym API listy wartości

Konwersja tokenów formuł zachowuje semantykę i flagi odwołań; potrafi normalizować tekst formuły nawiasami i nazwami arkuszy w cudzysłowach, więc tożsamość tekstu bajt-za-bajtem nie jest obiecana

Wyjście formuł wymaga jawnej pamięci podręcznej liczbowej, tekstowej, Boolean albo zwykłego błędu; brakująca pamięć podręczna jest odrzucana, gdy polityka zapisu nie przeliczy, łącznie z xrmManual i czystym grafem zależności przy xrmIfDirty; aplikacje mogą wywołać Recalculate albo wybrać xrmAlways przed zapisem, a pusty ciąg, False i liczbowe zero są poprawnymi pamięciami podręcznymi

Właściwości obliczeń muszą korzystać z obsługiwanych domyślnych; obliczenia ręczne, iteracja, zredukowana precyzja, alternatywny tryb odwołań, wymuszone albo niekompletne obliczenia, jawna konfiguracja wątków i inne znaczące ustawienia niedomyślne są odrzucane

Łańcuchy obliczeń i binarne indeksy komórek to regenerowane metadane i nie są kopiowane przez mostek pakietów; nieznane rekordy funkcji albo relacje pozostają błędami zamiast stawać się sfabrykowanymi częściami Open XML

Wejście binarne wymaga żarliwego wczytywania całych arkuszy; MetadataOnly i niepusta lista SelectedSheets są odrzucane przed zastąpieniem istniejącego modelu, bo leniwe wczytywanie wymagałoby zachowanego skonwertowanego archiwum

Gwarancje błędów i własności

Pakiety binarne są walidowane i konwertowane przed zresetowaniem skoroszytu przez zwykły parser XML; nieobsługiwane wejście, zniekształcona treść binarna, odrzucone tryby odczytu i anulowanie konwersji zachowują istniejące obiekty arkuszy, nazwę pliku, format źródła i wiązanie archiwum źródła

Po wejściu zwalidowanej konwersji binarnej do istniejącego parsera XML późne błędy parsowania XML albo błędy callbacków aplikacji podążają za zwykłym cyklem życia otwartego XML; gwarancja wstępna nie obiecuje wycofania dowolnych zapisów callbacków

Zapis etapuje cały pakiet binarny; wyjście plikowe korzysta z sąsiedniego pliku tymczasowego i jednego ostatecznego zastąpienia, a czytelne wyjście strumienia przeszukiwalnego zachowuje migawkę bajtów, rozmiaru i pozycji dla wycofania po nieudanym zatwierdzeniu

LastSaveUsedStreaming=False odzwierciedla kompletne etapowanie binarne nawet wtedy, gdy pośredni pisarz XML strumieniuje; pamięć obejmuje skonwertowane części i kompletny pakiet, więc ten backend nie jest strumieniowym pisarzem o ograniczonej pamięci

Raporty konwersji i kontrola wstępna zachowują spakowany zapis komórek, łącznie z mieszanką spakowanych wartości i zmaterializowanych formuł; udany zapis potrafi rozwinąć spakowane wartości przez istniejące przygotowanie stylów i pisarza arkusza, więc czystość raportu nie oznacza operacji zapisu niezmiennej albo niematerializującej

Udany zapis binarny plikowy czyści poprzednie powiązania surowego źródła XML; zapis strumieniowy zachowuje zachowanie nazwy pliku, a anulowanie jest sprawdzane przed zatwierdzeniem celu

API konwersji pakietów

procedure XlsbToOpenXml(Source: TZipArchive; Destination: TStream;
  CancelCheck: TXLSStreamCancelCheck = nil;
  EntryCompressionLevel: Integer = -1; EntryFixedDate: TDateTime = 0);
procedure OpenXmlToXlsb(Source: TZipArchive; Destination: TStream;
  CancelCheck: TXLSStreamCancelCheck = nil;
  EntryCompressionLevel: Integer = -1; EntryFixedDate: TDateTime = 0);
function XlsbStylesToXml(const Data: AnsiString): AnsiString;
function XlsbStylesFromXml(const Data: AnsiString): AnsiString;
function XlsbStringsToXml(const Data: AnsiString): AnsiString;
function XlsbStringsFromXml(const Data: AnsiString): AnsiString;

TXlsbFormulaValidator.Create(WorkbookXml) waliduje kontekst nazw skoroszytu, a Validate(FormulaText, SheetIndex) waliduje formułę bez dostępu do komórek arkusza; SheetIndex jest numerowany od zera, a validator należy do wywołującego

XlsbValidateTableXml(Data) i XlsbValidateAutoFilterXml(Data) walidują XML obiektów UTF-8 względem tych samych kontraktów enkodera używanych przez wyjście pakietu; błędy podnoszą istniejące wyjątki formatu albo nieobsługiwanej funkcji

Te API lxXlsb zachowują własność wywołującego; konwersja pakietu waliduje i etapuje wszystkie części przed zastąpieniem Destination od offsetu zerowego, a mostki części rdzenia korzystają z XML UTF-8 i surowych bajtów binarnych

EXlsbUnsupported dziedziczy z EXlsbFormatError i odróżnia oczekiwane odrzucenie podzbioru od zniekształconych danych; anulowanie podnosi ustanowiony wyjątek anulowania strumienia przed zatwierdzeniem

Kompresja akceptuje -1 do 9, a stała data akceptuje zero albo skończoną datę reprezentowalną w DOS od 1980 do 2107; nieprawidłowe opcje są odrzucane przed zmianami celu