У меня есть файл с 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 пытается выполнить формулу для ячейки и пересчитать значение. Если это вызывает исключение, вы можете отладить механизм вычисления, чтобы увидеть, где это происходит неправильно, включив режим отладки механизма калькуляции, как описано в этом документе