低版本 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怎麼使用 這裡就不贅述了