第4章 SpreadsheetML

テーブル定義

SpreadsheetMLにおけるテーブルは、とくにシート上のある範囲のセルをグループ化したものを指します。グループ化したセルは、見出し行の設定やソート、テーブル単位での書式設定といったことが行えるようになります。

テーブル定義
テーブル定義

シートには利用しているテーブル定義パーツを参照するtableParts/tablePart要素が追加されますが、テーブルとして指定されたセル自体にはとくに記述は追加されません。

sheet1.xml
<worksheet ...>
         <sheetData>
        <row r="1" spans="3:6" ...>
            <c r="C1" t="s">
                <v>2</v>
            </c>
            <c r="D1" t="s">
                <v>0</v>
            </c>
            <c r="E1" t="s">
                <v>1</v>
            </c>
            <c r="F1" t="s">
                <v>3</v>
            </c>
        </row>
        <row r="2" spans="3:6"...>
            <c r="C2">
                <v>1</v>
            </c>
            <c r="D2">
                <v>300</v>
            </c>
            <c r="E2">
                <v>400</v>
            </c>
            <c r="F2">
                <f>AVERAGE(D2,E2)</f>
                <v>350</v>
            </c>
        </row>
        ...
    </sheetData>
    ...
    <tableParts count="1">
        <tablePart r:id="rId2"/>
    </tableParts>
</worksheet>

テーブル1つにつきテーブル定義(Table Definition)パーツ1つを作成します。テーブル定義パーツには、シートからの参照に必要な情報と、テーブルを開始する左上セルの位置、テーブルを終了する右下セルの位置を記述します。ほか、表示結果を加工するためのフィルター情報を定義します。

テーブル定義パーツの物理的な配置はxl/tablesフォルダ下です。Excel 2019ではtablen.xmlのようなファイル名で作成されます。テーブルに含まれるデータの実体はワークシートや共有文字列テーブルにあります。

table1.xml
<table xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"
 ... 
 id="1" name="テーブル1" displayName="テーブル1" ref="C1:F4"
    totalsRowShown="0">
    <autoFilter ref="C1:F4" .../>
    <tableColumns count="4">
        <tableColumn id="1" ... name="月"/>
        <tableColumn id="2" ... name="去年"/>
        <tableColumn id="3" ... name="今年"/>
        <tableColumn id="4" ... name="月平均"/>
    </tableColumns>
    <tableStyleInfo name="TableStyleLight4" showFirstColumn="0" showLastColumn="0"
        showRowStripes="1" showColumnStripes="0"/>
</table>

テーブル定義パーツはtable要素をルート要素とし、フィルターを指定するautoFilter要素、見出し行の情報を格納するtableColumns要素、そのテーブルに適用する書式を指定するtableStyleInfo要素などによって構成されます。

table要素にそのテーブルの全般的な情報を記述します。id属性はワークブック内でユニークな値とします。ref属性にセルの範囲の左上端と右上端を指定しています。displayName属性はユーザーインターフェースで表示されるテーブルの名前です。name属性はアプリケーションがテーブルに対する操作を行う場合に利用され、こちらはそのワークシート内でユニークな値とします。

totalsRowShow属性は、合計値を示すための行(Totals Row)を定義する場合に、その表示可否を指定します。

table要素では、このほかテーブルに対するコメントを指定するcomment属性などが指定できます。

autoFilter要素には、テーブルの表示範囲がセル位置で記述されています。

上の例ではtableColumn要素には列名が記述されているだけですが、列に対しての計算式結果などもこの要素の子要素として格納されます。

tableStyleInfo要素には、テーブルに対して適用するスタイルと、行や列の表示設定を指定します。

テーブル定義パーツは、テーブルを含むようなワークシートに暗黙的に関連付けられます。

ピボットテーブル

複数の項目について集計、分析を行うための特殊なテーブルがピボットテーブルです。基本的な構造はテーブル定義と似ますが、ピボットキャッシュなどピボットテーブルのための構造もあります。

ピボットテーブルはピボットキャッシュとピボットテーブルの2つによって構成されます。

ピボットキャッシュ

ピボットキャッシュはさらにピボットキャッシュ定義とピボットキャッシュレコードの2つによって構成されます。

ワークブックパーツにピボットキャッシュのリストを、pivotCaches要素によって格納します。pivotCaches/pivotCache要素では、ピボットキャッシュ定義パーツを参照します。

ピボットキャッシュ定義では、対応するピボットキャッシュレコードを関連付けIDによって参照します。

cacheSource要素に元データのタイプ、タイプがワークシートであればセル範囲の情報を記述します。

cacheFields/cacheField要素にフィールドの定義を格納します。

ピボットキャッシュ定義は、元データの数だけ行います。行う定義が同じであっても、シートの数が1つ増えると、ピボットキャッシュ定義、ピボットキャッシュレコード、ピボットテーブルが1つずつ増えることになります。