Comment lire automatiquement dans des valeurs calculées avec PHPExcel?
J'ai le texte suivant Excel fichier:
Je l'ai lu dans par boucle sur chaque cellule et l'obtention de 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, si l'on lit dans les données de l'amende, il lit dans les calculs littéralement:
Je comprends de discussions comme celui-ci que je peux utiliser getCalculatedValue()
pour les cellules calculées.
Le problème est que dans les feuilles de calcul Excel, je suis à l'importation, je ne sais pas à l'avance lequel les cellules sont calculés et qui ne le sont pas.
Est-il un moyen pour moi de lire dans la valeur d'une cellule dans une manière qui obtient automatiquement la valeur si elle a une valeur simple et obtient le résultat du calcul si c'est un calcul?
Réponse:
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 veut généralement la valeur de l'calculs plutôt que de les équations elles-mêmes, en tout cas cela fonctionne:
...->getCell($columnAsLetters.$row)->getCalculatedValue();
- Un problème lors de l'utilisation de
getCalculatedValue()
peut être la conversion automatique des valeurs numériques avec des zéros. E. g. '0600" devient calculé '600', alors vous avez besoin de la chaîne "0600" sur PHP/base de données secondaires. Donc je suis en utilisantgetValue()
à la première à aller chercher le contenu d'une cellule, puis à identifier des équations par le biais de l'un des principaux '=' pour récupérer leur valeur calculée pargetCalculatedValue()
. PHPExcel
a été superseeded parPhpSpreadsheet
- Je suis en utilisant
PHPExcel 1.7.8
et ressemble à ce qu'il obtient la valeur de la formule automatiquement sans rien faire de spécial, je l'ai testé aujourd'hui sur ma machine de développement. De même, un client s'est présenté que pour lui, il ne fonctionne pas donc je suis en attente de voir ce qui est le cas précis qui ne fonctionne pas. Type de formule? Type de fichier Excel? Nous allons voir, pour l'instant, il étrangement fonctionne, tout simplement. Mise à jour: je suis en utilisant$sheet->rangeToArray
méthode, c'est pourquoi!
Vous devez vous connecter pour publier un commentaire.
getCalculatedValue() semble fonctionner pour toutes les cellules, voir ci-dessus
getCalculatedValue()
est en effet pas la valeur par défaut: après je l'ai changé pourgetCalculatedValue()
, le processus PHP constamment été à court de mémoire de traitement de l'3 mo de Excel car il ya tellement de nombreux calculs, sans doute avec VLOOKUPs à partir de 1..65535. Mais depuis que j'ai un choix à calculer, pour chaque cellule ou pas, je peux le faire "smart calculs" d'une feuille, par exemple, calculer simpleSUM
s, mais pas l'exploitation intensive des ressourcesVLOOKUP
sgetCalculatedValue
est maintenant obsolète et retourne sans mise en forme des résultats. RessemblegetFormattedValue
peut-être le seul à utiliser, mais dépend des besoins de l'utilisateur.Si vous avez un doute sur le contenu d'une cellule (une valeur ou une formule inclus),
Je vous recommande surtout faire une vérification si la cellule contient une formule, puis de copier - coller en conséquence. getOldCalculatedValue() est très utile dans ce cas. Voici un exemple:
Pour de grands ensembles de données, getCalculatedValue() la fonction est vraiment lourd et beaucoup de mémoire sera nécessaire pour effectuer correctement.
Ressemble getCalculatedValue() est obsolète. Essayez d'utiliser getFormattedValue() à la place.
getCalculatedValue()
semble faire du bon boulot que tu voulais. Il sera de retour la valeur correcte si la cellule contient FBV ( formule (valeur de base ). Si non, alors la valeur normale sera retournée à la place.Je n'ai jamais importé un fichier excel en PHP donc c'est juste un coup de poignard dans le noir.
Pourquoi ne pas consulter le premier caractère dans la cellule pour un "="
Si vrai getCalculatedValue()
si pas getCell()