Excel セル解析, 少しのぞいてみる
Excel ファイル(xls) 操作するライブラリは CloseXML, POI, OpenXLSX など枚挙にいとまがない。 これらを用いずに Excel 表の解析をおこなうことは労力的には困難ではあり, 実際には自作しないけれども, 興味本位として覗いてみたくなる。
xml をえる
xls を解凍( 7zip などで) したら xmlファイル等が展開される。そのうち, 表構造の記述があるファイルは,
- 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 で定義されたセル・数字(前述の順番に対応) ]
により, 紐付けることができる。
ここではセル値のみに就いて示した。detail は Office Open XML (ISO/IEC 29500) 仕様のドキュメントを参照されてくださひ。