Tengo el siguiente archivo Excel:¿Cómo se lee automáticamente en valores calculados con PHPExcel?
lo leí en por bucle sobre cada célula y conseguir el valor con 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;
}
Sin embargo, a pesar de que lee en la multa de datos, se lee en los cálculos literalmente:
que entiendo de discusiones like this one que puedo usar para getCalculatedValue()
celdas calculadas.
El problema es que en las hojas de Excel que estoy importando, no sé de antemano qué celdas se calculan y cuáles no.
¿Hay alguna manera de leer el valor de una celda de forma que obtenga automáticamente el valor si tiene un valor simple y obtiene el resultado del cálculo si se trata de un cálculo?
Respuesta:
Resulta que getCalculatedValue()
obras para todas las células, hace que me pregunte por qué esto no es lo habitual en getValue()
ya que yo creo que por lo general se querría el valor de los cálculos en lugar de las ecuaciones sí, en todo caso, esto funciona:
...->getCell($columnAsLetters.$row)->getCalculatedValue();
Un problema al usar 'getCalculatedValue()' podría ser la conversión automática de valores numéricos con ceros a la izquierda. P.ej. '0600' se calculará '600', mientras que se necesita la cadena '0600' en PHP/base de datos. Por lo tanto, estoy usando 'getValue()' al principio para recuperar el contenido de una celda, luego identifico las ecuaciones por medio de un '=' para obtener su valor calculado por 'getCalculatedValue()'. – proximus
'PHPExcel' ahora ha sido reemplazado por' PhpSpreadsheet' – Dennis