RubyXLを使用してマクロの含まれたexcelを出力しようとしてハマったのでメモ。
workbook = RubyXL::Parser.parse("path/to/Excel/template.xlsm") worksheet = workbook[0] worksheet[0][0].change_contents("TEST") workbook.write("path/to/desired/Excel/file.xlsm")
やったのはこれだけ。
しかし、出力されたexcelを開くと下記のエラーが。
「’file.xlsx’には読み取れない内容が含まれています。このブックの内容を回復すますか?ブックの発行元が信頼できる場合は、「はい」をクリックしてください。」
ここで「はい」を選択すると以下のメッセージが表示される。
読み取れなかった内容を修復または削除したことにより、ファイルを開くことができました。
修復されたレコード: /xl/worksheets/sheet1.xml パーツ内のビュー
しかし、実際に開かれたexcelはマクロどころか全てのデータがtemplateから消えていた。。。
本家のgithubにxlsmに対応してあると書いてある。
「Ruby lib for reading/writing/modifying .xlsx and .xlsm files」
https://github.com/weshatheleopard/rubyXL
しかし、下記サイトには同様の事象が発生している人がいた。
「.xlsmにマクロが含まれているとデータが壊れる…」
http://qiita.com/Kta-M/items/02a2c41c5624f75498aa
検索してもろくな回答が見つからなかったので別のgemを色々試したが他もマクロ付きexcelはうまく動作せず。
諦めようかと思ったけどRubyからJavaに変えるとかしか方法が思いつかなかったので
再度RubyXLを調査したところエラーにならない方法がわかりました。
どうやらボタンなどのオブジェクトに対応していないみたいです。
ボタンを押してマクロを実行しようと思っていたのですが
ボタンをなくしてファイルを開いた際にマクロを実行するように変更したところ
マクロ付きのexcelを出力することができました。
こんなことで半日費やしてしまった。。。
でも解決してよかった。