Vzorce a objekty listů ve formátu XLSB
Fasáda sešitu XLSX čte a zapisuje validovanou podmnožinu XLSB s typovanými hodnotami, obyčejnými uloženými vzorci, názvy, běžnými styly i reprezentovanými objekty listů; nereprezentovaný stav se odmítne dřív, než dojde na cílový výstup
Otevření a uložení
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 detekuje obsah i registrovaný typ části sešitu; úspěšný binární vstup nastaví SourceFormat=xlsxExcelBinaryWorkbook, zatímco původní čtyři ordinály TXLSXFileFormat zůstávají beze změny a nový člen má ordinál 4
Přetížení SaveAs a SaveAsChecked pro soubor i stream přijímají binární formát explicitně; výchozí ukládání stále volí obyčejný formát sešitu Open XML, bez ohledu na příponu názvu souboru
GetConversionReport(xlsConversionExcelBinaryWorkbook) prozkoumá aktuální stav, aniž by rozvinula zabalené úložiště buněk; nepodporované položky zůstávají povinnými selháními, dokonce i pro nekontrolované ukládání či AllowLossy=True
Podporovaný stav
- Obyčejné listy, Unicode názvy a řetězce, čísla, logické hodnoty, prázdné a stylizované prázdné buňky a obyčejné reprezentovatelné chybové hodnoty
- Import sdílených i inline řetězců, kompaktní nativní numerické i short-cell záznamy, viditelnost listů, příznak datumového systému, obyčejná zobrazení a výběry sešitu i listu
- Běžná písma, vzorkované výplně, boční ohraničení, číselné formáty, reference buněčných formátů, příznaky zarovnání a ochrany a reprezentované barvy RGB, motivů i indexované
- Výšky řádků, šířky sloupců, podporované příznaky dimenzí a okraje stránek
- Obyčejné buněčné vzorce používající podporované starší tokeny funkcí, skalární operátory, odkazy A1, odkazy na jediný list téhož sešitu a názvy sešitů či listů, s numerickými, řetězcovými, logickými a obyčejnými chybovými mezipaměťmi
- Globální i listově rozsahové definované názvy, příznaky skrytých názvů a komentáře, sloučené buňky, obyčejné externí i interní hyperodkazy, rozdělená či zamrzlá podokna a výběry podoken
- Rozsahy AutoFilteru, skalární vlastní porovnání s jedním či dvěma kritérii AND/OR a libovolné seznamy vybraných hodnot s volitelným výběrem prázdné hodnoty
- Obyčejné tabulky listů s identitou, rozsahem, viditelností záhlaví a řádku součtů, identitou sloupců a popisky, literálními popisky řádku součtů, reprezentovanými kritérii AutoFilteru i příznaky vestavěného stylu tabulky
- Nastavená komprese ZIP i deterministická časová razítka ZIP přes stávající volby sešitu
Konverzní hlášení pokrývá funkce živého modelu a kompletní validace balíčku zůstává poslední branou pro neplatné odkazy, poškozené záznamy, neznámé atributy či nepodporovaný zachovaný obsah
Binární import zachová souborové explicitní výchozí písmo i podporované vestavěné číselné formáty, včetně stylizovaných prázdných buněk; číselné formáty závislé na lokalizaci vyžadují explicitní kód formátu, aby čtečka nemusela regionální formátování odhadovat
Explicitní hranice
Záznamy sdílených vzorců, vlastnictví polí a dynamických polí, konstanty polí i funkce vracející pole, future funkce, uživatelsky definované funkce, odkazy na externí sešity a více listů, VBA, externí datová připojení, kontingenční tabulky a Slicery, grafy a kreslení, komentáře a rich text, validace, podmíněné formátování i pokročilá metadata stránek či rozšíření zůstávají mimo tento backend
Počítané sloupce tabulek, vzorce agregace součtů, stav řazení, diferenciální či vlastní formátování tabulek, tabulky vázané na dotazy i mapování XML se odmítnou; odmítnou se i filtry podle barvy, ikony, dynamické a skupin dat, typovaná nativní Boolean vlastní kritéria, nativní vlastní kritéria vypadající číselně uložená jako řetězce i přepisy viditelnosti filtračních tlačítek
Importovaná ne-vlastní kritéria filtrů listu se zachovají jako RawXml; vlastní porovnání naplní stávající typované vlastnosti kritérií, zatímco vybrané hodnoty i výběr prázdné hodnoty zůstávají kritériem podloženým XML, nikoli novým typovaným API seznamu hodnot
Konverze tokenů vzorců zachovává sémantiku i příznaky odkazů; může normalizovat text vzorce se závorkami a názvy listů v uvozovkách, takže textová identita bajt po bajtu neslibuje
Výstup vzorců vyžaduje explicitní mezipaměť typu číslo, řetězec, Boolean či obyčejnou chybu; chybějící mezipaměť se odmítne, když ukládací politika nebude přepočítávat, včetně xrmManual i čistého grafu závislostí s xrmIfDirty; aplikace mohou před uložením zavolat Recalculate nebo zvolit xrmAlways a prázdný řetězec, False i numerická nula jsou platné mezipaměti
Výpočetní vlastnosti musí používat podporované výchozí hodnoty; ruční výpočet, iterace, snížená přesnost, alternativní referenční režim, vynucený či nekompletní výpočet, explicitní konfigurace vláken i jiné významné nevýchozí nastavení se odmítnou
Výpočetní řetězce i binární indexy buněk jsou regenerovaná metadata a nepřenášejí se skrze most balíčku; neznámé záznamy funkcí či relace zůstávají selháními, místo aby se staly vymyšlenými částmi Open XML
Binární vstup vyžaduje eager načítání celých listů; MetadataOnly i neprázdný seznam SelectedSheets se před náhradou stávajícího modelu odmítnou, protože líné načítání by vyžadovalo zachovaný převedený archiv
Záruky selhání a vlastnictví
Binární balíčky se validují a konvertují dřív, než obyčejný XML parser sešit resetuje; nepodporovaný vstup, poškozený binární obsah, odmítnuté čtecí režimy i zrušení konverze zachovají stávající objekty listů, název souboru, zdrojový formát i vazbu na zdrojový archiv
Po vstupu validované binární konverze do stávajícího XML parseru následují pozdní selhání parsování XML či aplikačních zpětných volání obvyklý životní cyklus otevření XML; předběžní záruka neslibuje rollback libovolných zápisů zpětných volání
Ukládání připraví celý binární balíček; výstup do souboru použije sousední dočasný soubor a jedinou finální náhradu a čitelný seekovatelný stream si ponechá snímek bajtů, velikosti i pozice pro rollback po selhání potvrzení
LastSaveUsedStreaming=False odráží kompletní binární přípravu, i když mezilehlý XML zapisovač streamuje; paměť zahrnuje převedené části i kompletní balíček, takže tento backend není streamovací zapisovač s ohraničenou pamětí
Konverzní hlášení i předběžná kontrola si ponechají zabalené úložiště buněk, včetně směsi zabalených hodnot a materializovaných vzorců; úspěšné ukládání může zabalené hodnoty rozvinout stávající přípravou stylů a listovým zapisovačem, takže čistota hlášení neznamená neměnnou či nematerializující operaci ukládání
Úspěšné binární ukládání do souboru vymaže předchozí vazby na surový XML zdroj; ukládání do streamu si zachová chování názvu souboru a zrušení se kontroluje dřív než potvrzení cíle
API konverze balíčků
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) validuje kontext názvů sešitu a Validate(FormulaText, SheetIndex) validuje vzorec bez přístupu k buňkám listu; SheetIndex je od nuly a validátor vlastní volající
XlsbValidateTableXml(Data) a XlsbValidateAutoFilterXml(Data) validují UTF-8 objektové XML proti týmž kontraktům kodéru, jaké používá výstup balíčku; selhání vyvolají stávající výjimky formátu či nepodporované funkce
Tato API v lxXlsb si ponechávají vlastnictví volajícího; konverze balíčku validuje a připraví všechny části dřív, než nahradí Destination od offsetu nula, a mosty jádrových částí používají XML v UTF-8 a surové binární bajty
EXlsbUnsupported dědí z EXlsbFormatError a odliší očekávané odmítnutí podmnožinou od poškozených dat; zrušení vyvolá zavedenou výjimku zrušení streamu dřív než potvrzení
Komprese přijímá -1 až 9 a fixní datum přijme nulu či konečné datum reprezentovatelné v DOS z rozsahu 1980–2107; neplatné volby se odmítnou dřív, než dojde na změny cíle