第4章 SpreadsheetML

計算式

セル要素内の子要素であるf要素は、Formula(計算式)を格納するための要素です。計算式は、関数、参照するセル、数値で構成されます。

SpreadsheetMLでは、計算式に従ってデータを処理することをCalculation(算出)と呼びます。

f要素に記述された計算式はアプリケーションによって算出処理され、その結果が同じセルの子要素であるv要素に格納されます。計算式や参照しているセルの内容に変更があったときのアプリケーションの挙動は、主にワークブックのcalcPr要素で記述する、算出プロパティによって制御されます。

シナリオ

SpreadsheetMLでは、ある範囲のセル値の変更を何通りも試行したい場合に利用する、Scenario(シナリオ)という機能があります。あるセルの値を何通りも試行することで、それを参照する計算式で結果の変化を観測することができます。

シナリオは、主に次の3つで構成されます。

  • 主にユーザーが識別するために用いるシナリオ名
  • 変化させるセルの範囲指定
  • シナリオの用途などを記述するためのコメント

SpreadsheetML仕様では、シナリオの情報はシート単位で管理されます。シナリオの情報はscenario要素に記述され、scenarios要素の子要素として格納されます。

worksheet1.xml
<worksheet ...>
  <scenarios current="1" show="0" sqref="G4 G6 G7 G8">
    <scenario name="Best Case" locked="1" count="3" user="anonymous"
      comment="Created on 6/9/2006_x000a_Modified on 6/9/2006">
      <inputCells r="D5" val="151" numFmtId="37"/>
      <inputCells r="D9" val="226"/>
      <inputCells r="D13" val="126"/>
    </scenario>
    <scenario name="Worst Case" locked="1" count="3" user="anonymous"
      comment="Created on 6/9/2006">
      <inputCells r="D5" val="50" numFmtId="37"/>
      <inputCells r="D9" val="40"/>
      <inputCells r="D13" val="30"/>
    </scenario>
  <scenarios>
  ...
</worksheet>

scenarios要素のcurrent属性はシートで現在選択されているシナリオを指定します。子要素であるscenario要素をインデックス値で指定しています。上の例では1なので、name="Worst Case"のscenario要素が指定されています。

show属性も同様にscenario要素を指定するインデッックス値です。ユーザーが最後に実行した、表示したシナリオを指定しています。

シナリオによって変化したセルを参照する計算式を持つセルのように、セル値の変化が影響するセルをsqref属性に指定します。

シナリオ情報は、それぞれscenario要素へ指定します。scenario要素の属性としては次のものがあります。

  • ユーザーが識別するためのシナリオ名を指定するname属性
  • 設定したユーザー名を指定するuser属性
  • 子要素の個数を指定するcount属性
  • シート保護が設定されている場合に、シナリオの編集を不可にするlocked属性、ユーザーへの表示を不可にするhidden属性

変化対象のセルは、scenario要素の子要素であるinputCellsへ指定します。上の例では、セルを参照するr属性と、シナリオを実行した場合に挿入される値を格納するval属性が指定されています。ほか、書式指定を参照するnumFmtId、セルの移動や削除に関連するdelete、undone属性があります。