xfId属性
xfId属性にはセルのスタイル定義のID番号が指定されています。
上記のシートでセルB1の定義を確認すると、s属性の値は"1"となっています。
<x:sheetData>
【中略】
<x:row r="1" spans="1:4" ht="19.5" thickBot="1" x14ac:dyDescent="0.45">
<x:c r="B1" s="1" t="s">
<x:v>0</x:v>
</x:c>
【中略】
</x:row>
【中略】
</x:sheetData>
cellXfs要素の1番目(最初のxf要素を0として数えるので正しくは2番目)の xf要素(CellFormat) を確認すると、xfId属性は"3"となっています。
<x:xf numFmtId="0" fontId="4" fillId="4" borderId="0" xfId="3">
<x:alignment vertical="center" />
</x:xf>
xfIdは /xl/style.xmlのcellStyleXfs要素における xf要素(CellFormat) のインデックス番号です。
cellStyleXfs要素の3番目のxf要素を見ると
<x:xf numFmtId="0" fontId="4" fillId="4" borderId="0" applyNumberFormat="0" applyBorder="0" applyAlignment="0" applyProtection="0">
<x:alignment vertical="center" />
</x:xf>
となっています。
ここまででセルB1についてxf要素が2つ登場しました。一つは「cellXfs要素の子要素であるxf要素」で、もう一つは「cellStyleXfs 要素の子要素であるxf要素」です。
cellXfs要素はセルB1の書式をあらわしており、また cellStyleXfs要素はセルのスタイル定義の書式をあらわしています。
セルB1はセルのスタイルを適用したので、cellXfs要素だけでなく、cellStyleXfs要素の書式も同時に適用されます。
たまたま今回はいずれのxf要素とも「 numFmtId="0" fontId="4" fillId="4" borderId="0" 」となっていますが、
2つのxf要素の間で値が異なる場合は 「cellXfs要素の子要素であるxf要素」 が優先されます。
例えばセルのスタイルを適用した後にセルのB1についてフォントの色を赤にし、セル内容を右寄せにすると 「cellXfs要素の子要素としてのxf要素」 は以下のようになります
<x:xf numFmtId="0" fontId="9" fillId="4" borderId="0" xfId="3" applyFont="1" applyAlignment="1">
<x:alignment horizontal="right" vertical="center" />
</x:xf>
結果としてセルB1については「 fontId="9" fillId="4" 」 「<x:alignment horizontal="right" vertical="center" />」が適用されることになります。
なお、このファイルに適用されている「セルのスタイル」の定義 は/xl/style.xmlのcellStyles要素にあります。
Excelでセルに「セルのスタイル」を適用すると、 それに対応するcellStyle要素が(Excelによって)追加されます。
セルのスタイル定義(cellStyle要素)はそれぞれxfId属性を持っています。xfId属性が"3"となっている要素は
<x:cellStyle name="どちらでもない" xfId="3" builtinId="28" />
となっており、スタイルの名前とbuiltinIdを知ることがわかります。
「apply」で始まるxfの属性(applyFont, applyBorder等)は「そのxf要素において指定されたId属性(fontIdやborderId)が適用されるべきかどうか」を示す属性です。
これがExcel 2016によってどのように解釈されるのか、applyFont属性の値を変えながら実験してみました。
「cellXfs要素の子要素であるxf要素」 と 「cellStyleXfs 要素の子要素であるxf要素」 では 「cellXfs要素の子要素であるxf要素」 のほうが優先される、と書きましたが、
厳密にはapplyで始まる属性が同一の場合にのみ優先されるようです。
cellXfsのxf要素 | cellStyleXfsのxf要素 | 適用されたフォント |
---|---|---|
applyFont="0" | applyFont="0" | cellXfsのxf要素のフォント |
applyFont="1" | applyFont="0" | cellXfsのxf要素のフォント |
applyFont="0" | applyFont="1" | cellStyleXfsのxf要素のフォント |
applyFont="1" | applyFont="1" | cellXfsのxf要素のフォント |