kumasysjp

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  で定義されたセル・数字(前述の順番に対応)  ]

で紐付けることができる。

実際には より厳密な定義がなされているが、表だけを用いる場合は以上のかんたんなルールで変換できる。