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 を設定し、元の 4 つの TXLSXFileFormat 序数は変わらず、新しいメンバーの序数は 4 です

ファイルとストリームの SaveAs、SaveAsChecked 各オーバーロードはバイナリ形式を明示的に受け付けます。デフォルトの保存は、ファイル名拡張子に関係なく通常の Open XML ワークブック形式を選び続けます

GetConversionReport(xlsConversionExcelBinaryWorkbook) は、パック セル ストレージを展開せずに現在の状態を検査します。未対応エントリは、チェックなし保存や AllowLossy=True でも必須失敗のままです

対応する状態

変換レポートはライブ モデルの機能を対象とし、完全なパッケージ検証が、無効な参照、不正なレコード、未知の属性、未対応の保持内容に対する最終ゲートであり続けます

バイナリ インポートは、ファイルの明示的デフォルト フォントと、書式付き空白セルを含む対応する組み込み表示形式を保持します。ロケール依存の表示形式には明示的な書式コードが必要で、リーダーが地域書式を推測しません

明示的な境界

共有数式レコード、配列と動的配列の所有、配列定数と配列を返す関数、将来関数、ユーザー定義関数、外部ワークブックと複数シート参照、VBA、外部データ接続、ピボットテーブルとスライサー、グラフと描画オブジェクト、コメントとリッチテキスト、入力規則、条件付き書式、高度なページや拡張メタデータは、このバックエンドの対象外のままです

テーブルの計算列、集計行の集計数式、並べ替え状態、差分・カスタム テーブル書式、クエリ バウンドのテーブル、XML マッピングは拒否されます。色・アイコン・動的・日付グループのフィルター、型付きネイティブ Boolean カスタム条件、数値に見えるネイティブ文字列カスタム条件、フィルター ボタン可視性の上書きも拒否します

インポート済みの非カスタム ワークシート フィルター条件は RawXml として保持されます。カスタム比較は既存の型付き条件プロパティを満たし、値選択と空白選択は、新しい型付き値リスト API ではなく XML バックドの条件のままです

数式トークン変換はセマンティクスと参照フラグを保持します。かっこや引用符付きシート名で数式テキストを正規化することがあるため、バイト単位のテキスト一致は約束されません

数式出力には、明示的な数値・文字列・Boolean・通常エラーのキャッシュが必要です。保存ポリシーが再計算しない場合、xrmManual や、xrmIfDirty で依存グラフがクリーンなケースなどでは、キャッシュがないと拒否されます。アプリケーションは保存前に Recalculate を呼ぶか xrmAlways を選べ、空文字列、False、数値ゼロは有効なキャッシュです

計算プロパティは対応するデフォルトを使う必要があります。手動計算、反復計算、精度の引き下げ、代替参照モード、強制・不完全計算、明示的なスレッド設定など、意味のある非デフォルト設定は拒否されます

計算チェーンとバイナリ セル インデックスは再生成されるメタデータで、パッケージ ブリッジをまたいでコピーされません。未知の機能レコードやリレーションシップは、偽造された Open XML パーツになる代わりに失敗のままです

バイナリ入力には即時フルシート読み込みが必要です。MetadataOnly と空でない SelectedSheets リストは、既存モデルの置き換え前に拒否されます。遅延読み込みには保持された変換済みアーカイブが必要になるためです

失敗と所有権の保証

バイナリ パッケージは、通常の XML パーサーがワークブックをリセットする前に検証と変換を受けます。未対応入力、不正なバイナリ内容、拒否された読み込みモード、変換キャンセルでは、既存のワークシート オブジェクト、ファイル名、ソース形式、ソース アーカイブ バインディングが保持されます

検証済みバイナリ変換が既存の XML パーサーに入った後の、後発の XML 解析やアプリケーション コールバック失敗は、通常の XML オープン ライフサイクルに従います。プリフライトの保証は、任意のコールバック書き込みのロールバックを約束しません

保存はバイナリ パッケージ全体をステージングします。ファイル出力は兄弟一時ファイルと 1 回の最終置換を使い、読み取り可能なシーク可能ストリーム出力は、コミット失敗後のロールバック用にバイト列、サイズ、位置のスナップショットを保持します

LastSaveUsedStreaming=False は、中間 XML ライターがストリーミングしていても、完全なバイナリ ステージングを反映します。メモリには変換済みパーツと完全なパッケージが含まれるため、このバックエンドは上限付きメモリのストリーミング ライターではありません

変換レポートとプリフライトは、パック値とマテリアライズ済み数式の混在も含めて、パック セル ストレージを保持します。成功した保存は既存のスタイル準備とワークシート ライターを通じてパック値を展開できるため、レポートの純粋さが不変・非マテリアライズ保存操作を意味しません

成功したバイナリ ファイル保存は以前の raw 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 は呼び出し側所有を保ちます。パッケージ変換は、オフセット 0 から Destination を置き換える前にすべてのパーツを検証してステージングし、コア パーツ ブリッジは UTF-8 XML と生バイナリ バイトを使います

EXlsbUnsupported は EXlsbFormatError を継承し、想定内のサブセット拒否を不正データと区別します。キャンセルは、コミット前に確立されたストリーム キャンセル例外を発生させます

圧縮は -1 から 9 を受け付け、固定日付はゼロか、1980 年から 2107 年の DOS 表現可能な有限日付を受け付けます。無効なオプションは宛先変更の前に拒否されます