PHPで業務アプリを開発している方なら、
少なからずお世話になったことがあるであろう「PHPExcel」。
以下の記事によれば、
バージョン1.7.8よりも古いバージョンでは、
マクロを埋め込んだExcelファイル(.xlsm)をテンプレートに使えなかったのですが、
最近のバージョンのものだと、上記拡張子で入出力すれば、
マクロが消えずに書き出しが出来るようです。というか出来ました。仕事で。
うん。マクロ情報は確かに残ってたんだ。
ただ、そこでぬか喜びしていたところ、
ちょっと手こずった箇所があったので備忘録です。
PHPExcelでマクロを含んだ.xlsmファイルをテンプレートに使える (仕込んだマクロが簡単に呼び出せるとは言っていない)
マクロを含んだ.xlsm拡張子のファイルをテンプレートに使い、
その後PHPで処理を噛ませてデータ突っ込んで、
DLしたPHP加工済み.xlsmファイルにて、
確かにマクロの情報は生きていたんです。
ただ、テンプレートに使った.xlsmファイルなんですが、
テンプレートに、マクロを呼び出すためのボタン部品を仕込んでいたんですね。
何故かね。PHPExcelの処理を噛ませた後DLするとね。
加工済みファイルからはボタン消えてるんですよ。
これだとシート上からマクロ処理を呼び出せない。
さて困った。
各質問サイトでも阿鼻叫喚の地獄絵図
というわけで、解決策を探しにgoogle検索を彷徨います。
まぁ出るわ出るわ。同様の問題でけっ躓いて放置されている質問サイトたちが。
(↑ここはPHPExcelが.xlsmに対応する以前の質問のようです)
公式のリファレンスにもそれっぽい情報無かったし(探し方が悪かった説もありますが)、
同様の問題について、うまいこと解決したという情報は一切引っかからないし。
さてさて困り果てた。
取り急ぎの暫定対処2通り
幸い、私がマクロを使ってやりたかったことって、
ラベルプリンタロール紙での荷札印刷に対応するために、
「出力されたデータの数だけ、規定の印刷範囲を指定する」
というだけであり、そんなに複雑なことはしないんです。
なので、シートにボタンを設置する以外の、
次の方法を使って、当該マクロを呼び出すことが出来ました。
1.マクロをアドイン化してしまう
2.マクロをキーボードショートカットに登録する
……いや、本来はシートにでっかく「印刷」ってボタンを作りたかったんです。
そこを押すことで、細長いラベルをいい感じのページ区切りで印刷するようにしたかったんです。
まぁ、シート上のボタンを押すのか、Excel窓のリボンを押すのか、
はたまたキーボード操作で処理を呼び出すのかの違いであって、
どれでやっても同じ処理が動くので、結果だけ見れば変わらないのですが。
とりあえず、同様の問題でハマってる人に対して、
「こんな逃げ道があるよ」という情報提供になれば。
「どうしてもPHPExcelとボタンでのマクロ呼び出しを両立させたい」という方には、
ご期待に沿えず申し訳ない気持ちでいっぱいなのですが。
私もね。対処法を探したんですよ必死に。その結果がこれだよ。