Dokumentace HotXLS

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

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