このトピックでは、Open XML SDK CalculationChain クラスと、Open XML ファイル形式 SpreadsheetML スキーマとの関係について説明します。 SpreadsheetML ドキュメントを構成するパーツと要素の全体的な構造の詳細については、「 SpreadsheetML ドキュメントの構造」を参照してください。
SpreadsheetML での CalculationChain
ISO/IEC 29500 仕様の次の情報では、CalculationChain
(<calcChain/>
) 要素について説明します。
この種類のパーツのインスタンスには、ブック内の全ワークシート内のセルのうち、数式から値を計算するすべてのセルへの参照の順序付けられたセットが含まれています。 この順序付けによって、ワークシートが使用のために読み込まれたときに、相互に関連するセル数式が正しい順序で計算されます。
1 つのパッケージに含めることのできる計算チェーン パーツは 1 つだけです。
このコンテンツ タイプのパーツのルート要素は、calcChain です。
計算チェーン パーツは、ブック内のセルが前回計算されたときの順序を示します。 ここには、数式を含むセルに関する情報のみが記録されます。 数式の依存関係計算ツリーに関する情報は含まれません。 つまり、計算チェーン パーツは、数式における他のセルの値への依存関係を示すものではなく、前回セルが計算されたときの順序のみを示します。
特定の計算イベントによって、計算チェーン順序が変わることもあります。 たとえば、ブックに新しい数式を追加すると、計算チェーン パーツに参照が追加されます。
部分計算も計算順序の更新に影響します。 部分計算とは、スプレッドシート アプリケーションに実装される最適化の一種であり、値が変化したセルに依存しているセルのみを計算し、ブック内のそれ以外の数式は無視します。 これによって、既知の結果については余分な再計算を省略できます。 したがって、前回の計算時には無視された数式を (セル値が変化したために) 計算することが必要になると、これらの数式を評価するために、対象の数式が計算チェーンの "先頭" に移動します。
計算チェーン情報はスプレッドシート アプリケーションで読み込めますが、必須ではありません。 スプレッドシート アプリケーションで計算チェーン情報が有用であると判断される場合、読み込み時に数式および数式間の相互依存関係に基づいて計算チェーン情報をメモリ内に作成できます。 計算チェーン パーツで示される順序は、実装側アプリケーションに実行時の計算順序を強制するものではありません。
© ISO/IEC 29500: 2016
次の表に、 CalculationChain
クラスを操作するときに使用される一般的な Open XML SDK クラスを示します。
SpreadsheetML の要素 | Open XML SDK クラス |
---|---|
<c/> |
CalculationCell |
Open XML SDK CalculationChain クラス
Open XML SDK CalculationChain
クラスは、SpreadsheetML ドキュメントの Open XML ファイル形式スキーマで定義されている段落 (<calcChain/>
) 要素を表します。
CalculationChain
クラスを使用して、SpreadsheetML ドキュメント内の個々の<calcChain/>
要素を操作します。
Calculation Cell クラス
CalculationCell
クラスは、数式を含むセルを表すセル (<c/>
) 要素を表します。
ISO/IEC 29500 仕様の次の情報では、 CalculationCell
(<c/>
) 要素について説明します。
各 c 要素は、数式が含まれるセルを表します。 計算された最初のセルが最初に表示されます (上から下へ) などです。 参照属性 r は、シート内におけるセルのアドレスを示します。 インデックス属性 i は、セルが関連付けられているシートのインデックスを示します。
© ISO/IEC 29500: 2016
SpreadsheetML
ISO/IEC 29500 に記載されている次の情報は、アプリケーションが最初にフル計算を実行した後の計算チェーン例の XML を示しています。
<calcChain xmlns="…">
<c r="B2" i="1"/>
<c r="B3" s="1"/>
<c r="B4" s="1"/>
<c r="B5" s="1"/>
<c r="B6" s="1"/>
<c r="B7" s="1"/>
<c r="B8" s="1"/>
<c r="B9" s="1"/>
<c r="B10" s="1"/>
<c r="C10" s="1"/>
<c r="D10" s="1"/>
<c r="A2"/>
<c r="A3" s="1"/>
<c r="A4" s="1"/>
<c r="A5" s="1"/>
<c r="A6" s="1"/>
<c r="A7" s="1"/>
<c r="A8" s="1"/>
<c r="A9" s="1"/>
<c r="A10" s="1"/>
</calcChain>