ワークシート ペイン選択 API
TXLSWorksheet と TXLSXWorksheet は、選択されたセルおよび範囲領域を読み取ったり置き換えたりするための、同じペイン認識メソッドを公開しています
共通の型とメソッド
TXLSPanePosition = (xlspTopLeft, xlspTopRight, xlspBottomLeft, xlspBottomRight); TXLSSelectedAreas = array of WideString; function GetSelectedAreas(APane: TXLSPanePosition; out ActiveAreaIndex: Integer): TXLSSelectedAreas; function SelectAreas(APane: TXLSPanePosition; const Areas: array of WideString; ActiveAreaIndex: Integer = 0): Boolean; function TryGetWindowScroll(APane: TXLSPanePosition; out ARow, ACol: Integer): Boolean; function ScrollWindow(APane: TXLSPanePosition; ARow, ACol: Integer): Boolean;
領域テキストは A1 形式のセル参照または範囲参照を使用し、ActiveAreaIndex は返されるまたは指定された領域シーケンスに対する 0 から始まるインデックスです
領域シーケンスはソースの順序を保持し、重なり合う範囲を含むことがあります。選択の順序と重なりはワークシートのビュー状態の一部だからです
スナップショットの所有権
GetSelectedAreas は、文字列と長さが呼び出し元に帰属する新しい動的配列を返します。そのため、結果を変更または解放してもワークシートを変更することはできません
要求されたペインに表現された選択グループがない場合、結果は空で、ActiveAreaIndex は -1 になります
存在しないペインを読み取っても、ワークブック内にペイン、選択オブジェクト、セル、範囲が作成されることはありません
クラシック XLS のレコード集約
クラシック XLS はペインごとに独立した論理選択グループを保持し、同じペイン コードを持つ連続する BIFF Selection レコードをソース順に集約します
アクティブ行、アクティブ列、および ActiveAreaIndex は 1 つのグループ内のすべてのレコードで共有され、インデックスは単一の物理レコードではなく集約された領域シーケンス全体をアドレス指定します
手を加えていないグループを保存すると元のレコード本体が保持され、編集されたグループは最大 1369 領域の連続チャンクとして書き込まれ、各チャンクに同じ集約アクティブ インデックスが割り当てられます
あるペインを編集しても他のペインのグループは変更されず、ワークブックのコピーはペイン選択状態の全体を保持します
構造の編集
行全体または列全体の挿入と削除は、両方のワークブック エンジンにおいて、表現されている各ペインの順序付き選択グループを再マッピングします
存続する領域は順序とアクティブ領域の同一性を保持します。アクティブ領域が削除された場合は、最初に存続する後続領域が選択され、後続領域が残っていない場合は最後の存続する先行領域が選択されます
すべての領域が削除された場合、グループは削除境界上の 1 つのセルになります。選択された存続領域の外側にあるアクティブ セルは、その領域の左上のセルにフォールバックします
無効なクラシック レコード
不正な形式、非連続、または矛盾するクラシック Selection レコードは不透明なまま維持され、型付きの領域クエリを通じて公開されません
レコード検証中に拒否された物理レコードは、診断コード 1304 で xlsDiagnosticSelectionRecordInvalid を報告します。集約のみに関する矛盾は、ワークシートの EOF で 1 つのグループ診断を報告します。保存時には、すべての元のレコード本体がバイト単位で再生されます
大きな選択
領域の解析、正規化、構造の再マッピング、スナップショットの構築には、1 パスのビルダーまたは幾何学的な容量増加が使用されるため、大きな選択グループも償却済み線形時間を維持します
ペインのスクロール座標
TryGetWindowScroll は 1 つの論理ペインの最初の可視セルを返し、ScrollWindow はそれを変更します。どちらのエンジンも 1 から始まるワークシートの行座標と列座標を使用します
上のペインはウィンドウ全体の行を共有し、下のペインは下ペインの行を共有します。左のペインはウィンドウ全体の列を共有し、右のペインは右ペインの列を共有します
存在しないペインは、ビュー状態を作成せずに False を返し、クエリの出力はゼロに設定されます。無効な座標も、いずれかの軸が変更される前に False を返します
クラシック XLS は上と左の軸を Window2 に、下と右の軸を Pane に保存します。一方 XLSX は、sheetView と pane の対応する topLeftCell の値を独立して保持します
アトミックな更新
SelectAreas は、ワークシートの書き込みトランザクションを取得する前に、すべての A1 参照とアクティブ インデックスを検証します
不正または空の入力、無効なアクティブ インデックス、現在の分割またはウィンドウ固定のジオメトリに存在しないペインの場合、メソッドは False を返し、以前の選択は変更されません
成功した呼び出しは True を返し、既存のエンジン固有の選択オブジェクトとレガシー API を保持します
Delphi の例
if Sheet.SelectAreas(xlspBottomRight,
['C4:E5', 'D5:F6', 'G7'], 1) then
begin
Areas := Sheet.GetSelectedAreas(xlspBottomRight,
ActiveAreaIndex);
UseSelection(Areas, ActiveAreaIndex);
end;
if Sheet.ScrollWindow(xlspBottomRight, 20, 8) and
Sheet.TryGetWindowScroll(xlspBottomRight, Row, Col) then
ShowVisibleCell(Row, Col);
互換性
クラシックの SelectAreas(const Areas; ActiveAreaIndex) オーバーロードと XLSX の SelectAreas(const Areas; ActiveAreaIndex; APane) オーバーロードは、変更されずに引き続き利用できます
クラシックの ScrollRow および ScrollColumn プロパティ、および XLSX の 0 から始まる SetPaneScroll、GetPaneScroll、ScrollRow、ScrollCol メンバーも、変更されずに引き続き利用できます
共有ファサードは論理ペイン名を明示的に変換するため、呼び出し元はいずれかのファイル形式が使用する数値ペイン コードに依存しません