忍者ブログ

POIでマクロ有効ブック(xlsm)の作成

2015年05月27日 21時49分35秒
Apache POIでOpen XML形式(2007形式)のマクロ有効ブック(xlsm)を新規作成したくて色々と挑戦。
xlsxで保存することは出来ましたが、xlsmでは保存できず。(下記参照)
http://tetu.zouri.jp/java/poi/excel/excel.html

正確には、POIの処理は正常に完了し、xlsmファイルも出力はされました。
しかし、Excelで作成したファイルを開くと下記のエラーが発生してしまいます。
Excelでファイル'○○.xlsm'を開くことが出来ません。ファイル形式またはファイル拡張子が正しくありません。ファイルが破損しておらず、ファイル拡張子とファイル形式が一致していることを確認してください。

原因を調べてみたところ、POIのXSSFWorkbookで出力を行うと、xlsx形式で保存するようです。
なので、拡張子をxlsmにしても内容はxlsx。
Excelで保存したxlsxで保存したファイルの拡張子をxlsmに変更して開いても同様のエラーになります。
これについては公式でも説明がありました。
http://poi.apache.org/spreadsheet/limitations.html

英語は得意ではないですが、下記のようなことを書いているっぽいです。
Macros can not be created. The are currently no plans to support macros. However, reading and re-writing files containing macros will safely preserve the macros.
マクロは作成出来ない。マクロをサポートする予定もない。
ただし、マクロを読み込むこと、マクロを再出力することは出来る。

要は、xlsmを新規作成は出来ない。
しかし、作成済みのxlsmは正常に読み込めて、保存も可能ってことですね。
では、JAVAでxlsmを新規作成するにはどうしたらいいか?

まず、Excelで内容が何もない状態でxlsmで保存。
これをテンプレートとします。
POIでテンプレートを読み込み、色々と編集を行い、別名で保存。拡張子はxlsm。
これでマクロ有効ブック(xlsm)の状態で新規作成することが可能です。

PR
Comment
No title
これってエビデンスあります?
  Vodafone絵文字 i-mode絵文字 Ezweb絵文字