Come leggere automaticamente i valori calcolati con PHPExcel?

Ho il seguente file Excel :

alt text

L'ho letto getCell(...)->getValue() loop su each cella e ottenendo il valore con 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 = arrays(); 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; } 

Tuttavia, sebbene legga l'ammenda dei dati, legge letteralmente i calcoli:

alt text

Capisco da discussioni come questa che posso usare getCalculatedValue() per le celle calcolate.

Il problema è che nei fogli Excel che sto importndo, non so in anticipo quali celle vengono calcolate e quali no.

C'è un modo per me di leggere il valore di una cella in un modo che ottiene automaticamente il valore se ha un valore semplice e ottiene il risultato del calcolo se si tratta di un calcolo?

Risposta:

Si scopre che getCalculatedValue() funziona per tutte le celle, mi viene da chiedersi perché questo non è il valore predefinito per getValue() poiché penserei che di solito si vorrebbe il valore dei calcoli invece delle equazioni stesse, in each caso questo funziona :

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

alt text

getCalculatedValue () sembra funzionare per tutte le celle, vedi sopra

Sembra che getCalculatedValue () sia deprecato. Prova invece a get getFormattedValue ().

Se non si è sicuri del contenuto di una cella (valore o formula inclusi), si consiglia di eseguire principalmente un controllo se la cella ha una formula e quindi copia-incolla di conseguenza. getOldCalculatedValue () è molto utile in questo caso. Ecco un esempio di questo:

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

Per i set di dati di grandi size, la function getCalculatedValue () è davvero ingombrante e sarà necessaria molta memory per funzionare correttamente.

getCalculatedValue () sembra fare il lavoro giusto che si desidera: restituirà il valore corretto se la cella contiene FBV (valore basato su formula), se invece non verrà restituito il valore normale …

(scusa per il cattivo inglese)

Non ho mai importto un file Excel in PHP, quindi questa è solo una pugnalata al buio.

Perché non controllare il primo carattere nella cella per un "="

Se true getCalculatedValue ()
se non getCell ()