PHPExcelで出力したExcelの数式で再計算が実行できなくなった時の対処法

PHPExcelでレポート的なものを出力するプログラムの面倒を見ているのですが、最近のWindows Updateに伴ってOffice365がアップデートされ、恐らくそれが原因でPHPExcelで出力したExcelの数式が再計算できなくなってしまったようです。
数式が入力された大量のセルをひとつずつダブルクリックしていけば再計算されて正しいデータが表示されるのですが、そんなにヒマなわけもないので対処法を探し出しました。

発生バージョン

  • Office365 bussiness バージョン1803(これ以前のバージョンでは発生していないようです)

参考:https://technet.microsoft.com/ja-jp/office/mt465751

前程

  • PHPExcelのPHPExcel_IOFactory::createWriterでExcel2007を使用している

参考:PHPExcel https://github.com/PHPOffice/PHPExcel

対処法

PHPExcelの中を直に変更してしまうことになりますが、下記対応で一旦解消しました。

PHPExcel/Classes/PHPExcel/Writer/Excel2007.php
protected $preCalculateFormulas = false;

protected $preCalculateFormulas = true;

これで出力されたファイルで開いた際にちゃんと数式が計算された状態にすることができます。
ただし、書き込み時に再計算している?挙動になるかと思うので、書き込みにかかる時間は少し長くなりますのでご注意ください。

なお、PHPExcelはサポートを中止してPhpSpreadsheetに移行していますので、あんまりいないかもしれませんがこれから利用を検討している方はhttps://github.com/PHPOffice/PhpSpreadsheet を利用するようにしましょう。

これ、PhpSpreadsheetに移行したらデフォルトでもちゃんと再計算されるようになるんだろうか?
試せたらまた追記しますね。もっと良さげな対処法知っている方は是非教えてくださいー。

Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.