質問: PHPExcel_IOFactory::createWriter($obj_book, 'Excel2007'); $obj_writer->save($filePath); コード ``` このようなソースで、上書きするとエラーは起こらないものの、xlsmファイルが開けなくなってしまいます。 拡張子が、xlsxである場合は問題ないのですが、xlsmでもなんとかなる方法はないのでしょうか。
回答: PHPExcel にせよ PHPSpreadsheet にせよ、既存ファイルに対する上書きの際には意図しないオブジェクトの消失が発生します。 ※私は PHPSpreadsheet で、シートに貼り付けた画像が消えたことがあります なので、上書きするのではなく別ファイル名で書き出し→元ファイルを削除→別ファイル名からリネームで元ファイルにする、といった対策もありです。 ついでにいえば PHPExcel/PHPSpreadsheet のマクロ対応はかなり限定的なので、注意が必要です。 ※PHPExcel については、1.7.8 で「読むときに VBA を切り離して別個保管、書き出す際にマージ」という方法で処理するように対策された