趣味のプログラム工房

cfspreadsheet の挙動がおかしい Sheet指定無効?

Coldfusion(ver9)でcfspreadsheetタグを利用してExcelファイルの編集をと考えているのですが、マニュアル通りの挙動にならない。

複数のシートのあるブック(ファイル)で、複数シートの編集をしたいのですが、マニュアルによると

◾複数のシートを持つ Excel ファイルを読み取るには、read オプションで複数の cfspreadsheet タグを使用し、シートごとに異なる name および sheet または sheetname 属性を指定します。
◾単一ファイルに複数のシートを書き込むには、write アクションを使用してファイルを作成し、最初のシートを保存します。update アクションを使用して、各追加シートを追加します。

http://help.adobe.com/ja_JP/ColdFusion/9.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec17cba-7f87.html


とあるのですが、cfspreadsheetのreadオプションではシートごとに読み込むことはできず、すべてのシートが読み込まれます。
また、writeオプションでも、シート指定しての書き込みができないため、「最初のシートを保存」ということもできません。
そのため、updateオプションを使用したとき、シートが既に存在しているとエラーとなってしまいます。(updateは更新というより、シートの追加)

いろいろと検証した限りでは、cfspreadsheetのsheetオプション、sheetnameオプションは、アクティブシートを指定するだけの代物のようです。


というわけで、実際に複数シートを扱う際には、
cfspreadsheetで全シートを読込、
cfscriptのSpreadsheetSetActiveSheet関数で、シートを切り替えながら編集するのが正解みたい。
で、書き出す時も、cfspreadsheetのwriteオプションで一度に書き込み。

まあ、全部cfscriptのSpreadsheetRead関数とかで操作でいいんですが。

なんか釈然としないが、とりあえず解決!

2013年05月26日