Подтвердить что ты не робот

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

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

alt text

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

$highestColumnAsLetters = $this->objPHPExcel->setActiveSheetIndex(0)->getHighestColumn(); //e.g. '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(), так как я думаю, что обычно требуется значение вычислений вместо самих уравнений, в любом дело это работает:

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

alt text

4b9b3361

Ответ 1

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

Ответ 2

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

Ответ 3

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

Ответ 4

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

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

Ответ 5

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

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

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