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 でも必須失敗のままです
対応する状態
- 通常のワークシート、Unicode の名前と文字列、数値、Boolean 値、空白と書式付き空白セル、通常の表現可能なエラー値
- 共有とインラインの文字列入力、コンパクトなネイティブ数値と short-cell レコード、ワークシートの可視性、日付システム フラグ、通常のワークブック・ワークシート ビューと選択
- 共通フォント、パターン塗りつぶし、辺罫線、表示形式、セル書式参照、配置と保護フラグ、表現される RGB・テーマ・インデックス カラー
- 行の高さ、列の幅、対応する寸法フラグ、ページ余白
- 対応する旧式関数トークン、スカラー演算子、A1 参照、同一ワークブック単一シート参照、ワークブック・ワークシート名を使う通常のセル数式。数値、文字列、Boolean、通常エラーのキャッシュ付き
- グローバルとワークシート スコープの定義名、非表示名フラグとコメント、結合セル、通常の外部・内部ハイパーリンク、分割・固定ウィンドウ枠とペイン選択
- オートフィルター範囲、AND/OR 条件 1〜2 個のスカラー カスタム比較、省略可能な空白選択付きの任意の値選択リスト
- 識別子、範囲、ヘッダーと集計行の可視性、列識別子とキャプション、リテラル集計行ラベル、表現されるオートフィルター条件、組み込みテーブル スタイル フラグを備えた通常のワークシート テーブル
- 既存のワークブック オプションを通じた、設定済み ZIP 圧縮と決定論的 ZIP タイムスタンプ
変換レポートはライブ モデルの機能を対象とし、完全なパッケージ検証が、無効な参照、不正なレコード、未知の属性、未対応の保持内容に対する最終ゲートであり続けます
バイナリ インポートは、ファイルの明示的デフォルト フォントと、書式付き空白セルを含む対応する組み込み表示形式を保持します。ロケール依存の表示形式には明示的な書式コードが必要で、リーダーが地域書式を推測しません
明示的な境界
共有数式レコード、配列と動的配列の所有、配列定数と配列を返す関数、将来関数、ユーザー定義関数、外部ワークブックと複数シート参照、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 表現可能な有限日付を受け付けます。無効なオプションは宛先変更の前に拒否されます