Excel 表構造の解析のコツ
Excel (xls) のセルを、接合したりしたりして表を作成せしめたる場合、それを XAML などに転換したい場合、 Excel 内部の XML の秩序を知る必要がある。
ただしかんたんのため、装飾などは考えないものとする。
また, trivial な スキーマは無視する。
1. xml をえる
xls を解凍( 7zip などで) したらいろいろなファイルが展開されるが、表構造は、
- xl/sharedStrings.xml (ブック内シートのセル格納文字が、一挙に定義されている)
- xl/worksheet/sheet(n).xml (sheet名に拘わらず連番)
<<sharedString.xml>>
セル文字が
<si><t>HHHHH</t> ・・・ </si>
のように定義されている。これがどのセル(またはセル範囲)に対応するかは、 いかに示すように、sheet(n).xml にある。
<<sheet(n).xml>>
単純セルの場合
<c r=”C2″ t=”s”><v>3</v></c>
のように定義されている。 null のセルはこのような定義は存在しない。
結合したセルの場合
<c r=”A2″ s=”1″ t=”s”><v>2</v></c>
結合したセルの場合(被結合セル)
<c r=”B2″ s=”1″/>
被結合セルはすべからず空白みたいなものだが、それを示すためにこのように定義される。
結合したセルのセル位置
<mergeCells count=”4″>
<mergeCell ref=”A2:B2″/>
<mergeCell ref=”B4:C5″/>
<mergeCell ref=”D2:D5″/>
<mergeCell ref=”A6:D10″/>
</mergeCells>
<< あらためて >>
以上をまとめると、すなわち、
[ shareString.xml における 定義されたセル文字列の登場順番]と、
[sheet(n).xml で定義されたセル・数字(前述の順番に対応) ]
で紐付けることができる。
実際には より厳密な定義がなされているが、表だけを用いる場合は以上のかんたんなルールで変換できる。