2015-04-30 4 views
0

У меня есть файл с 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 

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

ответ

2

Вызов

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

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


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

+0

Я хочу, чтобы он возвращал 0,174, когда я использую getOldCalculatedValue(), но он возвращает 0.17, что плохо для меня, это проблема с значением getOldCalculated, потому что мне нужно, чтобы число возвращалось как минимум по первому десятичному знаку, в некоторых случаях мне нужен и второй десятичный знак, поэтому мне нужно получите значение 0,1744, когда я использую эту функцию, и я не хочу, чтобы muber был разрезан как 0,17. Я попробую режим отладки, о котором вы уже упоминали, если вы знаете, как я могу получить полный номер при использовании getOldCalculatedValue, было бы здорово. Спасибо –

+0

Если yourequest 'getOldCalculatedValue()' вы получите возвращаемый float со значением '0.1744360902255639' ..... это зависит от вас, как вы отформатируете это значение для отображения –

+0

Ofc ... значение пошло через другое функция, которая вернула отформатированное значение 0,17 вместо 0,1744360902255639 ..Так жаль тратить свое время ... Не могу поверить, что я потратил на это 3 часа :) :) –

Смежные вопросы