システムからのExcelの動的出力では行・列が可変のものが多いと思いますが、
このようなExcelファイルはOpenXML形式での出力は容易ではありません。
セルの必須属性で座標が必要
セルはc要素で表現されますが、必須属性としてr属性があります。
<sheetData>
<row r="1" spans="1:1">
<c r="A1" t="s">
<v>0</v>
</c>
</row>
</sheetData>
単一のセルにインデックス0の文字列が
表示される簡単な例なのですが、c要素にあるr属性に注目してください。A1と書いてありますね。
このA1はExcelの座標系のA1です。A列1行目のA1です。これが必須属性となっているのです。
つまり、行や列を可変にしたい場合、インデックスがずれる個所はすべてr属性を適切に書き直さなくてはなりません。
ヘッダ+可変の明細+フッタという構成の場合、もれなくフッタのセルのr属性も動的に調整する必要があります。
ExcelのX座標は26進数ではない
Excelの横方向の座標はAから始まり、Zまで行くと次はAAと二桁になります。
Excel2007では横方向に扱える列数が増えたため、ZZを越えてAAA列も存在します。
このアルファベットによる列表現は一見して26進数のように思えるかもしれません。
しかし、実際には26進数とはならないのです。つまり、Aは0ではない。
Aは0ではなく、1を表します。ですから、二桁になるとAAというように、上位桁がAになりますね。
もし、Aが0を表現するのであれば、Zの次はBAになるはずです。
この点は10進数表現からの変換の際にはまりやすいところなので注意してください。
X座標すべてがアルファベット表記ではない
X座標が全てアルファベット表記なのかというとそうでもなく、
たとえば列の横幅を設定するcol要素などでは、
<col min="1" max="3" width="14.625" customWidth="1" />
といったように、10進数表記で範囲指定がされていたりします。
Excel 2003でのXML出力では
参考までにExcel 2003でXML出力した場合のタグ構造も取り上げておきます。
<Row>
<Cell ss:StyleID="s1"><Data ss:Type="String">Hoge</Data></Cell>
</Row>
行を表すRow要素にセルを表すCell要素がぶら下がる形となっています。
座標は要素のインデックスで決まり、絶対座標を記述するr属性のようなものはありません。
可変な行・列を持つExcelファイルの出力はExcel 2003形式で行う方が遥かに容易に行えます。
投稿日時 : 2008年1月29日 17:29