質問: 業務システムをphpとmysqlで組んでいます。 帳票はphpexcelを用いてEXCELにデータを代入してファイル出力しています。 そこで問題となったのが、最新のEXCELでファイルを開くと数式を自動計算してくれないことです。 EXCELで解決すべきか、phpexcelで解決できるのかさえわかりません。 1.プログラムの仕組み (1)テンプレートなるEXCELにはあらかじめ表組みと数式を入力しておきます。 「J44」に「=SUM(J1:K43)」を入力しておく(J列とK列は結合しています) (2)1のテンプレートにphpexcelで以下のサイトのように値をはいていく感じです。 http://www.24w.jp/study_contents.php?bid=php&iid=phpexcel&sid=cell&cid=005 ⇒するとJ列に値が入力された形で、EXCELを開いたときには「J44」には1のSUMが実行されているはずでした。 しかし、EXCEL2007で開いたと同時に計算してくれたものが、新しくインストールされたOffice365のEXCELでは計算されずに「0」と表示されてしまいます。 (3)また、単なる「=N1」みたいな参照まで表示されずに「0」となっています。 2.試みたこと (1)EXCELの設定 ネットで色々調べると、「計算方法の設定」を「自動」にするなど書いてありましたが、元から「自動」なので解決しません。 http://tipstour.net/excel-option-enable-auto-calculate (2)ショートカットでの再計算 ブックを開いたのちに以下のショートカットを試しました。 F9を押すだけでは変化ありません。 Shift+F9でも変化ありませんでした。 CTRL+ALT+F9を押すとすべて計算される感じです。 https://msdn.microsoft.com/ja-jp/library/office/bb687891.aspx どうしてなのでしょうか? そして、どう解決すればよいのでしょうか? なるべくマクロは使いたくありません。 よろしくお願いいたします。
回答: 私もちょうど今日同じ現象に遭遇しました。 おそらくOffice365のバージョン1803から発生しています。 条件が違うかもしれませんが、私の方は下記の部分を書き換えてあげると解消しましたよ。 PHPExcel/Classes/PHPExcel/Writer/Excel2007.php ``` protected $preCalculateFormulas = false; ↓ protected $preCalculateFormulas = true; ``` ~~上記を利用時に変更するメソッドがあるのかもしれませんが、探せてないので私は直で書き換えて取り急ぎ対応してしまいました。~~(以下に追記しましたので上記で直接書き換えるのではなくそちらで対応をお願いします) ちなみにこれをすると書き込みに少し時間がかかってしまいますが、よければ一度試してみてください。 ご指摘いただきましたので追記です。 PHPExcelでは にsetメソッドがあるので、こちらを使用するようにしてください。 ちゃんとドキュメントにも記載がありました。