Bonjour à tous,

Je rencontre une difficulté concernant l'utilisation de la classe PHPExcel.

Je dois parser les données d'un fichier excel pour les rentrer dans une base de données, et ce fichier contient plusieurs feuilles.

Hors sur l'une des feuilles, une des colonnes contient des cellules dont la formule référence une autre feuille.

Quand j'utilise les méthodes de la classe pour afficher le contenu, par :

getValue, j'obtiens la formule en elle-même.
getCalculatedValue, utilisée normalement pour calculer le contenu des cellules avec une formule, j'obtiens une erreur.

Je pense avoir assez bien commenté le code pour que cela soit correctement compréhensible, donc le voila :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
 
<?php 
	error_reporting(E_ALL);
	include 'PHPExcel/Classes/PHPExcel.php'; //Chargement de la librairie
	include 'PHPExcel/Classes/PHPExcel/Reader/Excel5.php'; //Chargement de la librairie de lecture
 
 
	$files = 'myfile.xls' ; //définit le fichier, il contient 9 feuilles
 
	$excel_reader = new PHPExcel_Reader_Excel5() ; //Nouvel objet de lecture
	$excel_reader->setReadDataOnly(true) ; //true or false, même résultat
 
 
	$sheets = array(1 => 'Sommaire', 2 => 'Serveurs', 3 => 'Applis') ; //on référence 3 des 9 feuilles
	//La feuille ou se situe la formule qui pose problème est "Serveur", la formule pointant vers la feuille "Sommaire", "Applis" est la pour des tests supplémentaires, et ne sera pas utilisée ici
 
	$excel_reader->setLoadSheetsOnly($sheets) ;
 
	$classeur = $excel_reader->load($files) ; //on charge le fichier
 
 
	$feuille = $classeur->getSheetByName($sheets[2]); //On choisit la feuille "Serveurs"
	$feuille->getDefaultColumnDimension()->setWidth(12); //avec ou sans, cela ne fonctionne pas
 
	//<==========================================================================================>
	//<==========================================================================================>
	//Dans mon fichier excel, la cellule V3 contient les données "01J / 11Z", et est calculée par cette formule :
		//=RECHERCHEV(STXT(U3;1;8);Sommaire!$B$32:$C$54;2;FAUX)
		//en Anglais : =VLOOKUP(MID(U3,1,8),Sommaire!$B$32:$C$54,2,FALSE)
	//comme on le voit dans la formule, il y a une référence vers "Sommaire"
	//<==========================================================================================>
	//<==========================================================================================>
 
	echo $feuille->getCell('V3')->getValue(); //avec ça, on obtient :
	//=VLOOKUP(MID(U3,1,8),Sommaire!$B$32:$C$54,2,FALSE)
	//cela affiche la formule, et ne la calcule pas
 
	echo $feuille->getCell('V3')->getCalculatedValue(); //et avec ça :
	//Fatal error: Call to a member function cellExists() on a non-object in <path>\Classes\PHPExcel\Calculation.php on line 3209
	//cela plante, au lieu de calculer
?>
Je ne peux pas vous fournir le fichier excel, celui-ci contenant des données sensibles et personnelles.

Si quelqu'un a une solution, cela m'arrangerait beaucoup

Je vous remercie par avance pour les réponses que vous pourriez m'apporter, et vous souhaite une bonne soirée.