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
- Zwykłe arkusze, nazwy i ciągi Unicode, liczby, wartości Boolean, komórki puste i puste sformatowane oraz zwykłe reprezentowalne wartości błędów
- Wejścia ciągów współdzielonych i inline, kompaktowe natywne rekordy liczbowe i krótkokomórkowe, widoczność arkuszy, flaga systemu daty, zwykłe widoki i wybory skoroszytu oraz arkuszy
- Wspólne fonty, wzorzyste wypełnienia, obramowania krawędzi, formaty liczb, odwołania formatów komórek, flagi wyrównania i ochrony oraz reprezentowane kolory RGB, motywu i indeksowane
- Wysokości wierszy, szerokości kolumn, obsługiwane flagi wymiarów i marginesy strony
- Zwykłe formuły komórek z obsługiwanymi starszymi tokenami funkcji, operatorami skalarnymi, odwołaniami A1, odwołaniami do pojedynczego arkusza w tym samym skoroszycie i nazwami skoroszytu albo arkusza, z pamięciami podręcznymi liczbowymi, tekstowymi, Boolean i zwykłych błędów
- Nazwy zdefiniowane globalne i o zasięgu arkusza, flagi ukrycia nazw i komentarze, komórki scalone, zwykłe hiperłącza zewnętrzne i wewnętrzne, okienka podzielone albo zablokowane i wybory okienek
- Zakresy AutoFilter, skalarne porównania niestandardowe z jednym albo dwoma kryteriami AND/OR oraz dowolne listy wybranych wartości z opcjonalnym wyborem pustych
- Zwykłe tabele arkuszy z tożsamością, zakresem, widocznością nagłówka i wiersza sum, tożsamością i podpisami kolumn, literałowymi etykietami wiersza sum, reprezentowanymi kryteriami AutoFilter i flagami wbudowanego stylu tabeli
- Skonfigurowana kompresja ZIP i deterministyczne znaczniki czasu ZIP przez istniejące opcje skoroszytu
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