Ошибка при расчете формулы из файла excel с помощью PHPSpreadsheet

При попытке выполнить такой код:

$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
$reader->setReadDataOnly (true);
$spreadsheet = $reader->load ("test.xlsx");
$sheet = $spreadsheet->getActiveSheet ();
$sheet->getCell ('A1')->getCalculatedValue ();

Получаю такую ошибку:

Fatal error: Uncaught PhpOffice\PhpSpreadsheet\Calculation\Exception: Sheet1!A1 -> internal error in W:\domains\excel\vendor\phpoffice\phpspreadsheet\src\PhpSpreadsheet\Cell\Cell.php:275 Stack trace: #0 W:\domains\excel\testing.php(18): PhpOffice\PhpSpreadsheet\Cell\Cell->getCalculatedValue() #1 {main} thrown in W:\domains\excel\vendor\phpoffice\phpspreadsheet\src\PhpSpreadsheet\Cell\Cell.php on line 275

Формула в ячейке A1:

=ЕСЛИ(C23=1;ЕСЛИ(C21=0;ЕСЛИ(C38=E38;СЦЕПИТЬ(ТЕКСТ(AB15;"# ##0");" - первые ";W13;" мес. ";"       ";);0);0);ЕСЛИ(C21=0;ЕСЛИ(C38=E38;СЦЕПИТЬ(ТЕКСТ(Z15;"# ##0");" - первые ";W13;" мес. ";"       ";);0);0))

Значения других ячеек при этом:

C23 - 1
C21 - 1
C38 - 8
E38 - 8
AB15 - 118593.75
W13 - 96
Z15 - 120468.75

В самом файле excel формула просчитывается корректно, ошибок не возникает, получается 0. Как исправить данную ошибку?


Ответы (1 шт):

Автор решения: Платон

Проблема заключается в знаке ';' после заключительного аргумента, перед закрывающей скобкой функции excel:

СЦЕПИТЬ(ТЕКСТ(AB15;"# ##0");" - первые ";W13;" мес. ";"       ";)

По всей видимости, excel поддерживает такой синтаксис, а вот PHPSpreadsheet - нет.

→ Ссылка