第4章 SpreadsheetML

Worksheet

ワークシートは、ワークブックの中の主要な構造です。ワークブックは1つ以上のワークシートを含んでいます。前項で説明したように、SpreadsheetMLのデータはワークシート単位に分割されます。ワークシートはセルの集合であり、セルにはテキスト、数値、日付、計算式を含むことができます。また、セルのスタイルを定義することも可能です。

ルート要素はworksheetで、ワークシートの情報は3つに組織化され以下の順に格納されています。

  1. トップレベルシートプロパティ
  2. セルテーブル
  3. 補助シートプロパティ
ワークシートの構造
ワークシートの構造

トップレベルシートプロパティ

ワークシートの情報を表すための要素群です。sheet propertyに分類される要素を次に示します。

要素名 説明
sheetPr Sheet Properties。シート単位でのプロパティです。たとえばアプリケーションのユーザーが触れない箇所でシートを特定可能にするためのcodeName要素などを子要素として格納します。同名のsheetPr要素(Chart Sheet Properties)が存在します。
dimension Worksheet Dimensions。シートで使用している範囲を示すための要素です。ref属性でシート範囲の左上、右下の端を指定します。オプションです。
sheetViews Worksheet Views。アプリケーション上で表示したときに選択されているセルや、既定のテキスト色やグリッド色、数式を表示するかなど、シートの表示設定を記述します。同名でChart Sheet Viewsが存在します。
sheetFormatPr Worksheet Format Properties。シート単位の書式を設定する要素です。既定のカラム幅や列の高さ、上端下端の罫線の幅などを設定できます。
cols Column information。子要素であるcol要素に、特定のカラムごとの設定を記述します。カラムは数値で指定するため、min="4"、max="4"はDカラムを表します。直接的な幅をwidth属性で指定するほか、sheetFormatPr要素で設定したcustomWidthや、style定義パーツで指定したスタイルを参照することなどが可能です。
シートプロパティ例
<worksheet>
  <sheetPr filterMode="1"/>
  <dimension ref="A2:H14"/>
  <sheetViews>
    <sheetView tabSelected="1" workbookViewId="0">
      <selection activeCell="B3" sqref="B3"/>
    </sheetView>
  </sheetViews>
  <sheetFormatPr defaultRowHeight="15"/>
  <cols>
    <col min="1" max="1" width="12.85546875" bestFit="1" customWidth="1"/>
    <col min="3" max="3" width="3.28515625" customWidth="1"/>
    <col min="4" max="4" width="11.140625" bestFit="1" customWidth="1"/>
    <col min="8" max="8" width="17.140625" style="1" customWidth="1"/>
  </cols>
  ...
</worksheet>

セルテーブル

ワークシートは、セルデータを格子状に配置した集合として管理されています。

sheetData要素がワークシートのデータの親要素です。sheetData要素の内部は次のような構造になっています。

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要素の中は、次のようになっています。

sheetData例
<sheetData> 
  <row r="1" spans="1:5"> 
    <c r="A1"><v>1</v></c> 
    <c r="B1" t="s"> <v>0</v></c>
    <c r="C1"> <v>1</v></c>
    <c r="D1"><v>1</v></c>
    <c r="E1"> <f>SUM(C1:D1)</f><v>2</v> </c>
  </row> 
  <row r="2" spans="1:5">
    <c r="A2"> <v>2</v> </c>
    <c r="B2" t="s"><v>1</v></c>
    <c r="C2"> <v>2</v></c>
    <c r="D2"> <v>2</v></c>
   <c r="E2"><f>SUM(C2:D2)</f><v>4</v></c> 
  </row>
  ... 
</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要素にはその計算結果が格納されています。

シート補助フューチャー

worksheet要素は、他にシートの状態を定義する子要素を持ちます。

要素名 説明
sheetCalcPr シートレベルの算出プロパティを記述する要素です。
sheetProtection シート保護。

セルの編集許可のほか、列や行の削除の許可、シート上のオブジェクトやシナリオの編集許可などを設定できます。

protectedRanges 保護範囲
scenarios scenarios要素はそのシートで利用されるシナリオを格納するための要素です。
autoFilter オートフィルター。テーブル内でのセルについて、ユーザーインターフェース上への表示基準を指定します。
sortState オートフィルターによるソートについての情報を格納する要素です。
dataConsolidate 統合するデータ範囲
customSheetViews Custom Worksheet Views。
mergeCells セル結合の情報を持つmergeCell要素を格納するための要素です
phoneticPr Show Phonetic。
conditionalFormatting 条件付フォーマット。この要素のsqref属性で指定した範囲のセルについて、条件となる計算式と適用される書式を子要素で定義します
dataValidations データ妥当性の検証
hyperlinks ハイパーリンク
printOptions シートレベルの印刷用オプション設定を格納する要素です。属性はいずれもbooleanで、ヘッダーや罫線の印刷有無、シートの印刷位置を中央にするかを指定します
pageMargins ページマージン
pageSetup ページ設定
headerFooter ヘッダー・フッター設定
rowBreaks Horizontal Page Breaks(Row)。

水平方向改ページ情報を定義するbrk要素を子要素として格納します

colBreaks Vertical Page Breaks。

垂直方向改ページ情報を定義するbrk要素を子要素として格納します

customProperties カスタムプロパティ
cellWatches 表示セル情報
ignoredErrors 無視されるエラー。

ignoredError要素を子要素として格納します

smartTags スマートタグ
drawing DrawingMLコンポーネント参照
legacyDrawing VMLコンポーネント参照
legacyDrawingHF ヘッダー・フッター内のVMLコンポーネント参照
picture 背景画像
oleObjects 子要素としてoleObject要素を格納します。oleObject要素には、シート中で参照するOLEオブジェクト(埋め込みオブジェクト、埋め込みパッケージ)の情報を格納します。
controls 埋め込まれたコントロール
webPublishItems Web公開用項目
tableParts シート上のテーブル情報。子要素として、テーブル定義を参照するtablePart要素を格納します。

セル結合

SpreadsheetMLにおけるセルの結合は、mergeCell要素によって定義されます。ref属性に、結合するセル集合の左上端と右下端を指定します。結合したセルの値とセル罫線の書式は、左上のセルが保持します。

たとえばA1からC4までを1つのセルにまとめるとき、ref="A1:C4"と記述します。このときA1セルが、結合したセルの情報を保持します。

印刷用レイアウト

Excel画面上ではセルはシート上に無限に展開され、改ページなどは存在しません。このシートを印刷すると、どこかの位置で改ページされ出力されます。こうした印刷用の設定はシート補助フューチャーに記述します。

rowBreaks要素、colBreaks要素はそれぞれbrk要素を子要素に持ちます。brk要素はid属性に、改ページする列または行のインデックス値をゼロベースで指定します。

印刷についての全般的な設定はPrinter Settingsパーツで定義されます。印刷では、Printer SettingsパーツとprintOptions要素で設定されたシート単位での印刷用設定が適用されることになります。