PHPEXCEL getCalculatedValue или getFormattedValue возвращает фатальную ошибку

У меня есть файл с mime-type «application / octet-stream; charset = binary» и расширение «.xlsx». PHPExcel_IOFactory :: ident ($ this-> file) возвращает «Excel2007». Я создаю своего читателя следующим образом:

$this->objectReader = PHPExcel_IOFactory::createReaderForFile($this->file); 

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

 1)$sheet->getCell($columns[$i].$row->getRowIndex())->getValue() //return the actual formula as a string 2)$sheet->getCell($columns[$i].$row->getRowIndex())->getOldCalculatedValue() //returns the oldCalculated value which is not always corret (for example the value in the cell is 17.4% and it returns 0.17) 

Когда я выгружаю объект $ sheet-> getCell ($ columns [$ i]. $ Row-> getRowIndex ()), результат начинается с:

 object(PHPExcel_Cell)[142370] private '_value' => string '=IFERROR(IF(C$6="yes",IF(ISBLANK(INDIRECT(ADDRESS($AN15,MATCH($B$6,INDIRECT("'"&C$7&"'!"&$AN$9-1&":"&$AN$9-1),0),,,C$7),TRUE)),"",INDIRECT(ADDRESS($AN15,MATCH($B$6,INDIRECT("'"&C$7&"'!"&$AN$9-1&":"&$AN$9-1),0),,,C$7),TRUE)),""),"")' (length=231) private '_calculatedValue' => float 0.1744360902255639 private '_dataType' => string 'f' (length=1) private '_parent' =>... 

Правильное значение есть, но я не могу получить к нему доступ … Когда я пытаюсь получить значение ячейки с помощью getFormattedValue () или с помощью getCalculatedValue (), выход является фатальной ошибкой:

 Catchable fatal error: Argument 2 passed to PHPExcel_Calculation_LookupRef::INDIRECT() must be an instance of PHPExcel_Cell, boolean given 

Любая идея, как решить эту проблему? Я действительно застрял и понятия не имею. Спасибо.

Вызов

 $sheet->getCell($columns[$i].$row->getRowIndex())->getValue() 

вернет фактическую формулу для любой ячейки, которая содержит формулу


Значение _calculatedValue которое вы можете видеть при _calculatedValue объекта ячейки, – это та, которую вы можете получить, используя вызов

 $sheet->getCell($columns[$i].$row->getRowIndex())->getOldCalculatedValue() 

В этом случае вы говорите, что это неправильно ….. вы ошибаетесь, это правильно: 17.4% равно 0.174 … разница в том, что применение маски формата % отображает фактическое значение ячейки в MS Excel, умноженное на 100


Когда вы звоните

 $sheet->getCell($columns[$i].$row->getRowIndex())->getCalculatedValue() 

или

 $sheet->getCell($columns[$i].$row->getRowIndex())->getFormattedValue() 

PHPExcel пытается выполнить формулу для ячейки и пересчитать значение. Если это вызывает исключение, вы можете отладить механизм вычисления, чтобы увидеть, где это происходит неправильно, включив режим отладки механизма калькуляции, как описано в этом документе