Ответ 1
getCalculatedValue(), похоже, работает для всех ячеек, см. выше
У меня есть следующий Excel файл:
Я прочитал его через цикл по каждой ячейке и получив значение с помощью 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;
}
Однако, хотя он читает в данных в порядке, он читает в вычислениях буквально:
Я понимаю из обсуждений как этот, который я могу использовать getCalculatedValue()
для вычисленных ячеек.
Проблема в том, что в листах Excel, которые я импортирую, я заранее не знаю, какие ячейки вычисляются, а какие нет.
Есть ли способ прочитать значение ячейки в виде, который автоматически получает значение, если он имеет простое значение и получает результат вычисления, если это вычисление?
Оказывается, что getCalculatedValue()
работает для всех ячеек, заставляет меня задаться вопросом, почему это не является значением по умолчанию для getValue()
, так как я думаю, что обычно требуется значение вычислений вместо самих уравнений, в любом дело это работает:
...->getCell($columnAsLetters.$row)->getCalculatedValue();
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()