varias para hojas ejemplos documentación desarrolladores php phpexcel

para - ¿Cómo leer automáticamente en valores calculados con PHPExcel?



phpexcel varias hojas (5)

Tengo el siguiente archivo de Excel :

Lo leí pasando por todas las celdas y obteniendo 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, aunque se lee en la multa de datos, se lee en los cálculos literalmente :

Entiendo por discusiones como esta que puedo usar getCalculatedValue() para las 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 forma de que lea 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?

Responder:

Resulta que getCalculatedValue() funciona para todas las celdas, me hace preguntarme por qué esto no es el predeterminado para getValue() ya que creo que uno normalmente querría el valor de los cálculos en lugar de las ecuaciones mismas, en cualquier caso esto funciona :

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


Nunca he importado un archivo de Excel en PHP, así que esto es solo una puñalada en la oscuridad.

¿Por qué no verificar el primer carácter en la celda para un "="

Si es verdadero getCalculatedValue ()
si no getCell ()


Parece que getCalculatedValue () está en desuso. Intenta usar getFormattedValue () en su lugar.


Si no está seguro del contenido de una celda (valor o fórmula incluida), le recomiendo que haga una comprobación principalmente si la celda tiene una fórmula y luego copie y pegue en consecuencia. getOldCalculatedValue () es muy útil en este caso. Aquí hay un ejemplo de eso:

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

Para grandes conjuntos de datos, la función getCalculatedValue () es realmente engorrosa y se necesitará mucha memoria para funcionar correctamente.


getCalculatedValue () parece funcionar para todas las celdas, ver arriba


getCalculatedValue() parece hacer el trabajo correcto que deseaba. Devolverá el valor correcto si la celda contiene FBV (valor basado en fórmula). De lo contrario, se devolverá el valor normal.