J'ai le fichier - Excel suivant:
Je l'ai lu par en boucle sur chaque cellule et en obtenant la valeur avec 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;
}
Cependant, même s'il lit bien les données, il lit dans les calculs littéralement:
Je comprends des discussions comme celle-ci que je peux utiliser getCalculatedValue()
pour les cellules calculées.
Le problème est que dans les feuilles Excel que j'importe, je ne sais pas au préalable quelles cellules sont calculées et lesquelles ne le sont pas.
Existe-t-il un moyen pour moi de lire la valeur d'une cellule d'une manière qui obtient automatiquement la valeur si elle a une valeur simple et obtient le résultat du calcul s'il s'agit d'un calcul?
Il s'avère que getCalculatedValue()
fonctionne pour toutes les cellules, je me demande pourquoi ce n'est pas la valeur par défaut pour getValue()
car je pense que l'on voudrait généralement la valeur des calculs au lieu de la équations elles-mêmes, en tout cas cela fonctionne:
...->getCell($columnAsLetters.$row)->getCalculatedValue();
getCalculatedValue () semble fonctionner pour toutes les cellules, voir ci-dessus
Si vous n'êtes pas sûr du contenu d'une cellule (valeur ou formule incluse), je vous recommande de vérifier principalement si la cellule a une formule, puis de copier-coller en conséquence. getOldCalculatedValue () est très utile dans ce cas. En voici un exemple:
$code = $sheet->getCell('A'.$y)->getValue();
if(strstr($code,'=')==true)
{
$code = $sheet->getCell('A'.$y)->getOldCalculatedValue();
}
$objPHPExcel4->setActiveSheetIndex(0)
->setCellValue('A'.$l, $code);
Pour les grands ensembles de données, la fonction getCalculatedValue () est vraiment encombrante et beaucoup de mémoire sera nécessaire pour fonctionner correctement.
Il semble que getCalculatedValue () soit obsolète. Essayez plutôt d'utiliser getFormattedValue ().
getCalculatedValue()
semble faire le bon travail que vous vouliez. Il renverra la valeur correcte si la cellule contient FBV (valeur basée sur une formule). Sinon, la valeur normale sera renvoyée à la place.