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とボタンでのマクロ呼び出しを両立させたい」という方には、
ご期待に沿えず申し訳ない気持ちでいっぱいなのですが。
私もね。対処法を探したんですよ必死に。その結果がこれだよ。