Bonjour à tous,

Je me permets de vous solliciter car je rencontre une difficulté dans l'utilisation de la librairie PHPExcel (v1.7.9 datant de Juin 2013).

Voici le contexte :
Apache v2.0.61
PHP v5.1.6
PHPExcel v1.7.9

A partir d'un fichier CSV dont le séparateur est le caractère "," uploadé à partir d'un formulaire HTML, je génère un fichier XLS (format Excel 5 dans PHPExcel).
Dans mon fichier Excel généré je souhaiterai ajouté une formule Excel qui calcul une date (en nombre de jour ouvrés) à partir d'une autre date + un nombre de jours.
Pour cela j'utilise la foncion "=SERIE.JOUR.OUVRE(début;nb_jours_ouvrés)", au préalalble je me suis assuré d'avoir "activé" la macro sous excel.

Or quand j'utilise PHP pour remplir ma case avec la fonction d'ajout de jour ouvrés ci-dessus j'obtiens une Exception de type 'PHPExcel_Calculation_Exception' with message 'Mantis 20140203 143802!F2 -> Formula Error: An unexpected error occured'
J'ai au préalable dans mon script PHP définis la langue FR pour mes formules et j'ai également définis le format de ma colonne contenant le résultat de ma formule comme étant une Date.


Voici un extrait de mon code source...

Initialisation de mon objet PHPExcel :
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
 
require_once('lib/PHPExcel.php');
require_once('lib/PHPExcel/Writer/Excel5.php');
...
$locale = 'fr';
$validLocale = PHPExcel_Settings::setLocale($locale);
if (!$validLocale) {
	echo 'Unable to set locale to ' . $locale . " - reverting to en_us" . PHP_EOL;
}
 
$objPHPExcel = new PHPExcel();
//? Quelques propriétées
$objPHPExcel->getProperties()->setCreator("Edouard DANARADJOU");
$objPHPExcel->getProperties()->setLastModifiedBy("Edouard DANARADJOU");
$objPHPExcel->getProperties()->setTitle("GP_Mantis_".$current_date);
$objPHPExcel->getProperties()->setSubject("GP_Mantis_".$current_date);
$objPHPExcel->getProperties()->setDescription("Mantis GP");
...
Maintenant remplissage des cellules à partir des données extraites du CSV :
A partir de la colonne E, je souhaitera ajouter X jours ouvrés via la formule Excel SERIE.JOUR.OUVRE(...) et stocké cela dans la colonne F :

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
 
...
// Formatting Columns date
$worksheet->getStyle('E')->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_DDMMYYYY);
$worksheet->getStyle('F')->getNumberFormat()->setFormatCode(PHPExcel_Style_NumberFormat::FORMAT_DATE_DDMMYYYY);
 
// lecture du fichier brut extrait de MANTIS
$handle_fic_csv = fopen($uploadedFile, "r");
$index = 1;
// Parcours du fichier CSV avec spécifique si première ligne : entete
while(!feof($handle_fic_csv)) {
	$line = fgetcsv($handle_fic_csv, 1024, ",");
	if ($index == 1) {
		$excel_line = array($line[0], $line[1], $line[17], $line[5], $line[10], "Date resolution attendue", $line[18], $line[2], $line[3], $line[4], $line[9], $line[16], $line[7]);
	} else {
		if ($line[5] == "bloquant") {
			$excel_line = array($line[0], $line[1], $line[17], $line[5], $line[10], "=SERIE.JOUR.OUVRE(E".$index.";2)", $line[18], $line[2], $line[3], $line[4], $line[9], $line[16], $line[7]);
		} else if ($line[5] == "majeur") {
			$excel_line = array($line[0], $line[1], $line[17], $line[5], $line[10], "=SERIE.JOUR.OUVRE(E".$index.";12)", $line[18], $line[2], $line[3], $line[4], $line[9], $line[16], $line[7]);
		} else if ($line[5] == "mineur") {
			$excel_line = array($line[0], $line[1], $line[17], $line[5], $line[10], "=SERIE.JOUR.OUVRE(E".$index.";19)", $line[18], $line[2], $line[3], $line[4], $line[9], $line[16], $line[7]);
		} else if ($line[9] == "Support") {
			$excel_line = array($line[0], $line[1], $line[17], $line[5], $line[10], "=SERIE.JOUR.OUVRE(E".$index.";4)", $line[18], $line[2], $line[3], $line[4], $line[9], $line[16], $line[7]);
		} else {
			$excel_line = array($line[0], $line[1], $line[17], $line[5], $line[10], "", $line[18], $line[2], $line[3], $line[4], $line[9], $line[16], $line[7]);
		}
	}
 
 
	// appel inutile car le fichier extrait de Mantis est déjà au format utf8
	//$excel_line=  array_map("utf8_encode", $excel_line);
 
	$worksheet->fromArray($excel_line, NULL, "A".$index);
	$index++;
}
...
Et enfin sauvegarde et fermeture de l'excel :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
$worksheet->setSelectedCell('A2');
// Ecriture sur le disque de classeur
$worksheet->setTitle("Mantis ".date ("Ymd His"));
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save($xlsFile);
 
$downloadFile = "mantis/xls/".basename($xlsFile);
Voici l'erreur que j'obtiens :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
...
[05-Feb-2014 08:55:19] PHP Fatal error:  Uncaught exception 'PHPExcel_Calculation_Exception' with message 'Mantis 20140205 085519!F2 -> Formula Error: An unexpected error occured' in C:\Applis\SurveillanceMOAP\lib\PHPExcel\Cell.php:298
Stack trace:
#0 C:\Applis\SurveillanceMOAP\lib\PHPExcel\Writer\Excel5\Worksheet.php(460): PHPExcel_Cell->getCalculatedValue()
#1 C:\Applis\SurveillanceMOAP\lib\PHPExcel\Writer\Excel5.php(187): PHPExcel_Writer_Excel5_Worksheet->close()
#2 C:\Applis\SurveillanceMOAP\_ajax_uploadfile.php(117): PHPExcel_Writer_Excel5->save('C:\Applis\Surve...')
#3 {main}
  thrown in C:\Applis\SurveillanceMOAP\lib\PHPExcel\Cell.php on line 298
D'avance je vous remercie du regard externe que vous pourrez apporté. Et j'espere que l'un d'entre vous pourra trouver une solution afin que la formule fonctionne.

Edouard D.