У меня есть файл с mime-type "application/octet-stream; charset = binary" и расширение ".xlsx". PHPExcel_IOFactory :: ident ($ this-> file) возвращает «Excel2007». Я создаю мой читатель, как это:PHPEXCEL getCalculatedValue или getFormattedValue возвращает фатальную ошибку
$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 ($ колонки [$ я] $ 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
Любая идея, как решить эту проблему? Я действительно застрял и понятия не имею. Спасибо.
Я хочу, чтобы он возвращал 0,174, когда я использую getOldCalculatedValue(), но он возвращает 0.17, что плохо для меня, это проблема с значением getOldCalculated, потому что мне нужно, чтобы число возвращалось как минимум по первому десятичному знаку, в некоторых случаях мне нужен и второй десятичный знак, поэтому мне нужно получите значение 0,1744, когда я использую эту функцию, и я не хочу, чтобы muber был разрезан как 0,17. Я попробую режим отладки, о котором вы уже упоминали, если вы знаете, как я могу получить полный номер при использовании getOldCalculatedValue, было бы здорово. Спасибо –
Если yourequest 'getOldCalculatedValue()' вы получите возвращаемый float со значением '0.1744360902255639' ..... это зависит от вас, как вы отформатируете это значение для отображения –
Ofc ... значение пошло через другое функция, которая вернула отформатированное значение 0,17 вместо 0,1744360902255639 ..Так жаль тратить свое время ... Не могу поверить, что я потратил на это 3 часа :) :) –