第4章 SpreadsheetML

Style

シートの書式情報は、スタイルパーツに格納されます。WordprocessingMLではフォント情報とスタイル情報、番号定義の情報が別々のパーツでしたが、SpreadsheetMLではこれらが1つのパーツに格納されます。スタイル定義パーツの物理的なファイルはxl/styles.xmlファイルです。

スタイル定義パーツは、styleSheet要素をルートとして、次の子要素でシートのスタイル情報を定義しています。それぞれの子要素の個数を記録するcount属性を持ちます。

styleSheet要素の子要素一覧
要素名 説明
numFmts 子要素として番号書式を設定するnumFmt要素を格納する要素です。
fonts 子要素としてフォントを設定するfont要素を格納する要素です。
fills 子要素として塗りつぶしを設定するfill要素を格納する要素です。
borders 子要素として罫線を設定するborder要素を格納する要素です。
cellStyleXfs Formatting Records。master formatting records (xf's)を格納する要素です。
cellStyles Cell Styles。cellStyle要素を格納する要素です。
cellXfs Cell Formats。Cell Formats。master formatting record(xf)を格納する要素です。セルスタイルを経由せずセルから直接参照される場合のレコードを格納します。
dxfs Formats。子要素としてmaster differential formatting records (ワークブック中で参照される差分書式レコードのマスター。dxf's)を格納する要素です。
tableStyles Table Styles。子要素としてテーブルのスタイルを設定するtableStyle要素を格納する要素です。ピボットテーブルのスタイルはtableStyle要素には含みません。
colors styleSheet要素中での色情報の集合を格納する要素です。後方互換性のために用意されており、IndexColorなどの変換対応を記述します。

SpreadsheetMLにおけるスタイルのアーキテクチャ、指定例についてはISO/IEC 29500-1:2016 Annex L.2.7に説明があります。

Cell Styleは数字の書式、セルのそろえ方、フォント、罫線、塗りつぶしについてのスタイルです。

Table Styleはテーブルに指定した領域の書式についてのスタイルです。ヘッダー行の設定や背景色を2色交互にする設定、テーブル全体の太字設定などを行います。

Pivot Table Styleはピボットテーブルに関連したスタイルです。行や列として参照する座標の設定などを行います。

styleSheet要素の構造から分かるように、数値の書式、フォント、塗り潰し、罫線は1つの設定ごとに要素を用意します。数値の書式については、ビルトインの書式も存在します。

スタイル設定のID参照をまとめたものをレコードと呼びます。書式についての設定をまとめたmaster formatting records(書式レコードマスター。xf's)を参照することで、個別に参照を行うよりも記述量は削減されます。レコードに記述する書式参照は、基本的にはスタイルパーツ内で定義されている書式要素をそれぞれのインデックス値で指定します。数値書式はビルトインの書式もあり、ビルトインの書式のIDか、スタイルパーツで定義した書式のnumFmtIdの値を指定します。

シートパーツ中で、セルを表すc要素はs属性でセルスタイルのインデックス値を指定します。これはcellStyles要素の子要素、cellStyle要素をインデックス値から参照します。cellStyle要素はセルの書式情報として、自身の書式名をname属性に、参照する書式レコードマスターのIDをxfId属性に記述します。cellStyle要素で定義するほかの設定には、アウトラインのスタイルを記述するiLevel属性や、そのスタイル情報をアプリケーションで表示しないように指定するhidden属性、ビルトインのスタイルを呼び出すためのbuiltinId属性などがあります。

セルが、セルスタイルを経由せず直接セル書式レコードを参照する場合があります。このとき、セルはcellStyleXfs要素ではなくcellXfs要素中のレコードをxfId属性の値で参照します。(ただし、このxfがcellStyleXfs中のレコードを参照する場合もあります。)

セルに書式を当てていく適用順序については、ISO/IEC 29500-1:2016 Annex L.2.4.4にXMLと適用順序を図示した例があります。

ビルトインスタイル

SpreadsheetMLにビルトインで付属する、セルとテーブルのスタイル定義は仕様書の電子版に付属するOfficeOpenXML-SpreadsheetMLStyles.zipというファイルにまとまっていると、ISO/IEC 29500-1:2016 Annex G.に記述があります。Annex G.ではこれらのスタイルのどのように表示されるか、そのビルトインのスタイル名と共に例が記載されています。

セルの書式参照
セルの書式参照

ある書式、スタイルが設定されていて、その一部について元の要素を変更せず表示を上書きしたい場合があります。そのとき、その情報をmaster differential formatting records(差分書式レコードのマスター。dxf's)として格納します。この差分はほかの書式指定より後に読まれ、描画に反映されます。

たとえば、あるセルでスタイルインデックスs="1"が指定されていたとします。このとき、暗黙の関連付けでStyles.xmlが参照され、cellStyles要素内の2番目のcellStyle要素が参照されます。この2番目のcellStyle要素にxfId="0"が指定されていたとき、cellStyleXfs要素内で最初のxf要素で指定されているnumFmtIdやfontIdのインデックス値を参照し、書式が得られます。