kumasysjp

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) 仕様のドキュメントを参照されてくださひ。