ワークシートは、セルデータを格子状に配置した集合として管理されています。
sheetData要素がワークシートのデータの親要素です。sheetData要素の内部は次のような構造になっています。
sheetData要素の下は、行を意味するrow要素が連続します。row要素の下はセルを表すc要素が連続します。c要素には数式を格納するためのf要素、セル値を格納するためのv要素などが入ります。
row要素はr属性があり、行のインデックスを数字で表しています。c要素にもr属性というのがあり、こちらは“A1”、“C3”のようにセルの行と列の位置情報(リファレンス)を表しています。
A1スタイルとR1C1スタイル
SpreadsheetMLにおけるセル参照のスタイルには、A1スタイルとR1C1スタイルがあります。
ワークシートの表示形式について、行をアルファベットのAからZ、以降AA、AB……、列を1、2……と続けていき、参照するときも「$A$1」や「B2」のように指定するスタイルがA1スタイルです。
R1C1スタイルでは、行と列はともに数字です。参照するときは、たとえば2行3列目であれば「R3C2」のように指定します。
ISO/IEC 29500-1:2016中の例示では、ほぼA1スタイルで指定が行われています。
さらに、c要素にはt属性というのがあります。これはセルのデータタイプを表しています。t属性の値は、“b”(Boolean)、“e”(Error)、“inlineStr”(Inline
String)、“n”(Number)、“s”(Shared
String)、“str”(String)のいずれかですが、数値の場合の“n”がデフォルトとなっています。テキストデータの場合は“s”が指定されます。
次のような簡単なワークシートの場合を見てみましょう。
ワークシートのsheetData要素の中は、次のようになっています。
row要素のr属性値が1、2と連続した数値で行のインデックスを表しています。row要素の中のc要素にはr属性でA1、B1、C1・・・とリファレンスがあります。
c要素は、そのデータタイプによって内容が変化します。この例でA列は直接数値が入力されています。この場合、データタイプのt属性はありません。デフォルトで数値データを表しているからです。
B列は文字(あいうえお)が入力されています。テキストデータの場合はt属性でテキストを表すため、c要素には t="s"
が追加されます。このとき、セル値のv要素には文字データは入っていません。文字データは後述される文字データ用のパーツファイルに格納されます。
E列には関数が指定されています。それぞれ同じ行のC列とD列の合計値が計算されるようになっています。この場合、c要素の子要素としてf要素が追加されます。f要素の内容は、関数の式がそのまま格納され、さらにv要素にはその計算結果が格納されています。