HotXLS 文件

XLSB 公式與工作表物件

XLSX 活頁簿外觀層可以讀寫經過驗證的 XLSB 子集,涵蓋具型別值、快取的普通公式、名稱、常用樣式與可表達的工作表物件;無法表達的狀態會在輸出到目的地之前被拒

開啟與儲存

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 依活頁簿部分的內容與註冊型別偵測;成功的二進位輸入會設定 SourceFormat=xlsxExcelBinaryWorkbook,原始四個 TXLSXFileFormat 序數不變,新成員序數為 4

檔案與串流的 SaveAs 與 SaveAsChecked 多載可明確接受二進位格式;預設儲存仍選擇普通的 Open XML 活頁簿格式,與副檔名無關

GetConversionReport(xlsConversionExcelBinaryWorkbook) 檢視當前狀態而不展開緊密儲存格儲存;不受支援的條目即使是未檢查儲存或 AllowLossy=True 也仍是必要的失敗

受支援的狀態

轉換報告涵蓋現用模型的功能,而完整的套件驗證仍是無效參照、畸形記錄、陌生屬性或不受支援保留內容的最後關卡

二進位匯入保留檔案明確的預設字型與受支援的內建數字格式,包括帶樣式的空白儲存格;依 locale 而定的數字格式需要明確的格式代碼,讀取器不猜測區域格式

明確邊界

共用公式記錄、陣列與動態陣列擁有權、陣列常數與回傳陣列的函式、未來函式、使用者定義函式、外部活頁簿與多工作表參照、VBA、外部資料連接、樞紐分析表與交叉分析篩選器、圖表與繪圖、註解與 rich text、驗證、條件式格式設定,以及進階頁面或擴充中繼資料,都在這個後端之外

資料表計算欄、總計彙總公式、排序狀態、差異或自訂資料表格式、查詢綁定的資料表與 XML 地圖會被拒;色彩、圖示、動態與日期群組篩選、具型別的原生布林自訂條件、外觀像數值的原生字串自訂條件,以及篩選按鈕可見性覆寫也會被拒

已匯入的非自訂工作表篩選條件以 RawXml 保留;自訂比較填入既有的具型別條件屬性,選取值與空白選取則維持 XML 後盾的條件,不提供新的具型別值清單 API

公式 token 轉換保留語意與參照旗標;它可能以括號與加引號的工作表名稱正規化公式文字,因此不保證逐位元組的文字一致

公式輸出需要明確的數值、字串、布林或普通錯誤快取;儲存政策不會重算時,缺少快取會被拒,包括 xrmManual 以及相依性圖形乾淨時的 xrmIfDirty;應用程式可以在儲存前呼叫 Recalculate 或選擇 xrmAlways,而空字串、False 與數值零都是有效快取

計算屬性必須使用受支援的預設值;手動計算、迭代、降低精度、替代參照模式、強制或不完整的計算、明確的執行緒設定,以及其他有實質意義的非預設設定都會被拒

計算鏈與二進位儲存格索引是重新產生的中繼資料,不會跨套件橋複製;陌生的功能記錄或關聯仍是失敗,不會被偽造成 Open XML 部分

二進位輸入要求急切的整表載入;MetadataOnly 與非空的 SelectedSheets 清單會在取代既有模型之前被拒,因為延遲載入需要保留已轉換的封存

失敗與擁有權保證

二進位套件在一般 XML 剖析器重設活頁簿之前完成驗證與轉換;不受支援的輸入、畸形的二進位內容、被拒的讀取模式與轉換取消,都會保留既有工作表物件、檔名、來源格式與來源封存綁定

驗證過的二進位轉換進入既有 XML 剖析器之後,晚期的 XML 剖析或應用程式回呼失敗遵循一般的 XML 開啟生命週期;前置保證不承諾回復任意的回呼寫入

儲存會暫存整個二進位套件;檔案輸出使用同層暫存檔與一次最終替換,可讀取且可定位的串流輸出則保留位元組、大小與位置快照,供提交失敗後回復

LastSaveUsedStreaming=False 反映完整的二進位暫存,即使中繼 XML 寫入器是串流的也一樣;記憶體包含已轉換部分與完整套件,因此這個後端不是有界記憶體的串流寫入器

轉換報告與前置檢查保留緊密儲存格儲存,包括緊密值與已具體化公式的混合;成功儲存可能透過既有樣式準備與工作表寫入器展開緊密值,因此報告的純淨不代表儲存操作不可變或不具體化

成功的二進位檔案儲存會清除先前的原始 XML 來源綁定;串流儲存保留檔名行為,取消則在目的地提交前檢查

套件轉換 API

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) 驗證活頁簿名稱內容,Validate(FormulaText, SheetIndex) 在不存取工作表儲存格的情況下驗證公式;SheetIndex 以零為基底,驗證器由呼叫端持有

XlsbValidateTableXml(Data) 與 XlsbValidateAutoFilterXml(Data) 以套件輸出使用的同一套編碼器契約驗證 UTF-8 物件 XML;失敗會擲出既有的格式或不支援功能例外

這些 lxXlsb API 保留呼叫端擁有權;套件轉換會驗證並暫存所有部分,然後才從偏移零開始替換 Destination,核心部分橋接使用 UTF-8 XML 與原始二進位位元組

EXlsbUnsupported 衍生自 EXlsbFormatError,用來區分預期的子集拒絕與畸形資料;取消會在提交前擲出既定的串流取消例外

壓縮接受 -1 到 9,固定日期接受零或 1980 到 2107 之間有限且 DOS 可表示的日期;無效選項會在目的地變更之前被拒