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