Как автоматически читать в вычисленных значениях с помощью PHPExcel?

У меня есть следующий файл Excel :

alt text

Я прочитал его, перевернув каждую ячейку и получив значение с помощью getCell(...)->getValue() :

 $highestColumnAsLetters = $this->objPHPExcel->setActiveSheetIndex(0)->getHighestColumn(); //eg 'AK' $highestRowNumber = $this->objPHPExcel->setActiveSheetIndex(0)->getHighestRow(); $highestColumnAsLetters++; for ($row = 1; $row < $highestRowNumber + 1; $row++) { $dataset = array(); for ($columnAsLetters = 'A'; $columnAsLetters != $highestColumnAsLetters; $columnAsLetters++) { $dataset[] = $this->objPHPExcel->setActiveSheetIndex(0)->getCell($columnAsLetters.$row)->getValue(); if ($row == 1) { $this->column_names[] = $columnAsLetters; } } $this->datasets[] = $dataset; } 

Однако, хотя он прекрасно читает данные, он читает в вычислениях буквально :

alt text

Я понимаю из таких дискуссий, как этот, который я могу использовать getCalculatedValue() для рассчитанных ячеек.

Проблема в том, что в листах Excel, которые я импортирую, я заранее не знаю, какие ячейки подсчитываются, а какие нет.

Есть ли способ для меня прочитать значение ячейки таким образом, чтобы автоматически получить значение, если оно имеет простое значение и получает результат вычисления, если это вычисление?

Ответ:

Оказывается, что getCalculatedValue() работает для всех ячеек, заставляет меня задаться вопросом, почему это не является значением по умолчанию для getValue() так как я думаю, что обычно getValue() значение вычислений вместо самих уравнений, в любом случае это работает :

 ...->getCell($columnAsLetters.$row)->getCalculatedValue(); 

alt text

getCalculatedValue (), похоже, работает для всех ячеек, см. выше

Похоже, что getCalculatedValue () устарел. Вместо этого попробуйте использовать getFormattedValue ().

Если вы не уверены в содержании ячейки (включая значение или формулу), я рекомендую сначала выполнить проверку, если ячейка имеет формулу, а затем скопировать – вставить соответственно. getOldCalculatedValue () очень полезен в этом случае. Вот пример этого:

 $code = $sheet->getCell('A'.$y)->getValue(); if(strstr($code,'=')==true) { $code = $sheet->getCell('A'.$y)->getOldCalculatedValue(); } $objPHPExcel4->setActiveSheetIndex(0) ->setCellValue('A'.$l, $code); 

Для больших наборов данных функция getCalculatedValue () действительно громоздка, и для правильной работы потребуется много памяти.

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

(извините за плохой английский)

Я никогда не импортировал файл excel в PHP, так что это просто удар в темноте.

Почему бы не проверить первый символ в ячейке для "="

Если true getCalculatedValue ()
если не getCell ()