今回はセルの書式設定について説明します。

まずはExcelファイルでのセルの書式の設定について説明し、そのあとで具体的なコードを紹介します(する予定です)。

Excelファイルでのセルの書式の表現

セルの書式設定は、セルをあらわすc要素のs属性によって指定されます。

s属性に指定されている"1"や"2"などの値はCell Formatsのインデックス番号です。Cell Formatsは/xl/style.xmlに定義されています。

例えばセルB1について、そのs属性の値が"1"なので、Cell Formatsの中の2番目のxf要素に基づいてセルB1の書式が決まります。

セルB1に適用されるセルの書式指定(xf要素)についてみてみると、numFmtId属性、fontId属性、fillId属性、borderId属性, xfId属性がそれぞれセットされています。

numFmtId属性

numFmtIdの値はセルの「表示形式」についての指定です。定義済みの表示形式のIDがセットされます。

ID formatCode
0 General
1 0
2 0.00
3 #,##0
4 #,##0.00
9 0%
10 0.00%
ID formatCode
11 0.00E+00
12 # ?/?
13 # ??/??
14 mm-dd-yy
15 d-mmm-yy
16 d-mmm
17 mmm-yy
ID formatCode
18 h:mm AM/PM
19 h:mm:ss AM/PM
20 h:mm
21 h:mm:ss
22 m/d/yy h:mm
37 #,##0 ;(#,##0)
38 #,##0 ;[Red](#,##0)
ID formatCode
39 #,##0.00;(#,##0.00)
40 #,##0.00;[Red](#,##0.00)
45 mm:ss
46 [h]:mm:ss
47 mmss.0
48 ##0.0E+0
49 @

その他、(長くなるので割愛しますが)ロケール独自の「定義済み表示形式」があります。

2番目のxf要素のnumFmtIdは"9"なので、上記の表と照らし合わせて(セルB1は)書式"0%"が適用されることになります。

(定義済みの表示形式ではない、) このワークシートにおいてのみ定義されている表示形式は/xl/style.xmlのnumFmts要素に記述されます。

xf要素のnumFmtIdに、上記の表以外の値がセットされている場合、numFmtsを参照する必要があります。

<x:numFmts count="2" xmlns:x="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
  <x:numFmt numFmtId="6" formatCode="&quot;¥&quot;#,##0;[Red]&quot;¥&quot;\-#,##0" />
  <x:numFmt numFmtId="176" formatCode="0.E+00" />
</x:numFmts>

例えばセルC1においてs属性の値は"2"となっており、これに相当するxf要素のnumFmtIdは176になっています。numFmts要素に含まれるnumFmt要素の
<x:numFmt numFmtId="176" formatCode="0.E+00" />
によって、セルC1の表示形式は"0.E+00"となります。

次回はfontId属性、fillId属性、borderId属性について取り上げます。

OpenXMLSDKを使ってセルに表示形式をセットする方法については「セルの書式設定 - 表示形式」をご覧ください。