HotXLS ドキュメント

安全なピボット ワークシート マテリアライズ

バージョン 2.384.90 で分離ピボット評価とガード付きワークシート結果置換が追加され、バージョン 2.384.92 で対応するローカル ソースが、呼び出しごとに解決される定義名とテーブルへ拡張されています

ビューのマテリアライズ

if Workbook.RefreshPivotCache(Pivot.CacheId) <> 1 then
  raise Exception.Create('Pivot cache refresh failed');
if Workbook.MaterializePivotTable(Pivot) <> 1 then
  raise Exception.Create('Pivot output cannot be replaced safely');

TXLSXWorkbook.MaterializePivotTable(ATable: TXLSPivotTable): Integer は現在のキャッシュから結果を計算し、ビューの FirstRow と FirstCol へ配置します。成功で 1、未対応ソース、安全でない宛先、評価失敗、拒否されたワークブック変更では -1 を返します

更新とワークシート再計算は明示的な操作のままです。成功したマテリアライズは計算依存を無効化するため、呼び出し側は必要に応じて下流の数式を再計算できます

デフォルトのオーバーロードは、空白の宛先セルと、以前同じビューが所有していた変更なしセルを受け付けます。出力矩形全体の中に、所有されていない占有セルがどこかにあれば、結果ライターが埋めない隙間も含めて、操作は拒否されます

if Workbook.MaterializePivotTable(Pivot, True) <> 1 then
  raise Exception.Create('Existing Pivot values cannot be adopted safely');

TXLSXWorkbook.MaterializePivotTable(ATable: TXLSPivotTable; AAdoptExisting: Boolean): Integer は、最初のマテリアライズで、ビューが宣言した前回矩形の中にある既存スカラー セルを明示的に引き取れます。数式、配列メンバー、リッチテキスト、メタデータを持つセル、その矩形の外の内容を置き換える許可にはなりません

所有権、サイズ変更、移動

ビューは書き込まれたセルの正確な座標と型付き値スナップショットを保持します。XLSX 保存はこの所有権をピボット定義の中に保存するため、以後の更新は再オープン後にも検証できます

型付き内容の変更や、空白でない所有セルの除去があれば、更新全体を拒否します。数値のサブタイプは正規の数値表現を共有し、テキスト、Boolean 値、エラーは個別の同一性を保ちます

結果の縮小や移動は、生産されなくなった変更なし所有値だけをクリアします。既存のセル オブジェクト、書式、コメントは利用可能なまま、無関係なセルは所有セットの外に残ります

FirstRow や FirstCol を変えると次の出力が移動し、以前の所有座標はクリーンアップ用に利用可能なままです。空の結果は所有値をクリアし、アンカーのみの位置を保持します

分離プレビュー

function TXLSPivotTable.MakePreview(AWriter: TlxPivotResultWriter): Integer;
property TXLSPivotTable.EvaluationSourceTable: TXLSPivotTable;

TXLSPivotTable.MakePreview は、計算フィールドのプレースホルダーを含むキャッシュとビューの独立コピーを使い、評価後に破棄します。通常の Make は既存のライブ キャッシュ動作を保ちます

ライターはゼロ始まりの行・列オフセットと型付き値を受け取ります。戻り値は Make の集計セル数に準じ、ライター呼び出し回数とは別物です。キャッシュやライターがなければゼロを返し、評価やライターの例外は伝搬します

呼び出し側のレコード述語と登録済みオーナー フィルターは、ワークブックのスライサー選択も含めてプレビュー中も有効です。コールバックは一時的な評価済みビューとその一時キャッシュを受け取ります

TXLSPivotTable.EvaluationSourceTable は通常評価ではライブ ビューを、プレビューでは元のライブ ビューを返します。コールバックが接続ビューを識別する必要があるときに使い、評価済みレコードはコールバックの一時 Cache から読みます

コールバック オーナーの所有権は呼び出し側に留まります。プレビュー オブジェクトとそのレコードを、コールバックやプレビュー呼び出しの終了後も保持してはいけません

安全性の境界

マテリアライズには、同一ワークブックに登録されたビューとキャッシュ、対応するローカルの矩形・定義名・テーブル ソースが必要です。ソース解決 は現在の名前とテーブル範囲に従い、未対応または未解決のソースは変更の前に拒否されます

現在のソース ジオメトリ、他のピボット位置、構造化テーブル、クエリ結果範囲、結合セル、固定・動的配列は、新しい出力やクリアが必要な旧所有セルと交差できません。テーブルの集計はキャッシュ レコードから除外されていても引き続き保護されます

検証と出力ステージングは読み取りリースの下で実行され、その後に通常のワークブック変更ガードと世代チェックが続きます。凍結された読み取り専用ワークブック ビューは、セルを置き換えずジオメトリも変えずにマテリアライズを拒否します

フィルターは読み取り専用で、ワークブックの通常の単一ライター契約に従う必要があります。分離により通常のプレビュー計算がライブ キャッシュを変更することは防げますが、別途捕捉したライブ オブジェクト経由の任意のコールバック書き込みはロールバックできません

この操作がマテリアライズするのはライブラリの計算結果レイアウトです。完全なネイティブ ピボット レイアウト オーサリング、スライサー UI 作成、クロスフィルター データなし表示評価は別の機能のままです