PHPExcel 在 PHP7.0 以上版本報錯

anjing發表於2019-04-02

低版本 PHPExcel中 在PHP7.0以下時執行不會報錯,當切換PHP版本為PHP7.0以上時將會報錯

'break' not in the 'loop' or 'switch' context

PHPExcel\Calculation\Functions.php  LINE: 581

我們們看一下檔案 Functions.php

if (($value === NULL) || (is_float($value)) || (is_int($value))) {
                return 1;
        } elseif(is_bool($value)) {
                return 4;
        } elseif(is_array($value)) {
                return 64;
                break;//這是581行
        } elseif(is_string($value)) {
            //  Errors
            if ((strlen($value) > 0) && ($value{0} == '#')) {
                return 16;
            }
            return 2;
        }

可以發現 return 跳出當前函式或者迴圈直接返回 break 並會執行而報錯

方案1:將581行的break註釋掉

方案2 : 將PHPExcel升級到1.81版本以上

方案三: 使用PHPExcel的升級產品PhpSpreadsheet

方案1修改原始碼 不推薦
方案2PHPExcel已不再維護 故不推薦
對於框架版本國過老 或經多手的專案 建議使用 方案1,2

方案3為PHPExcel的替代品升級產品 而且在維護 新專案推薦方案3

PHPExcel 1.8.1 地址 https://github.com/PHPOffice/PHPExcel/commit/372c7cbb695a6f6f1e62649381aeaa37e7e70b32

PhpSpreadsheet安裝 如下

文件地址:https://phpspreadsheet.readthedocs.io/en/latest/#getting-started

GitHub下載:https://github.com/PHPOffice/PhpSpreadsheet

composer安裝:composer require phpoffice/phpspreadsheet

PHPExcel與PhpSpreadsheet?

PhpSpreadsheet是PHPExcel的下一個版本。它打破了相容性,大大提高了程式碼庫質量(名稱空間,PSR合規性,最新PHP語言功能的使用等)。

因為所有的努力都轉移到了PhpSpreadsheet,所以不再維護PHPExcel。PHPExcel,補丁和新功能的所有貢獻都應該以PhpSpreadsheet master分支為目標。

PhpSpreadsheet怎麼使用 這裡就不贅述了

相關文章