Export PHP => Excel, float reconnu comme une date

VaN
Mammouth du PHP | 1107 Messages

25 févr. 2010, 11:37

Bonjour,

Je fais un export d'un tableau PHP vers Excel, de cette manière :
$separator = ";";
	
	// Première ligne Excel
	$csv_output = "Structure".$separator."Date d'inscription".$separator."Places maximum autorisées".$separator."Places réservées".$separator."Montant H.T.".$separator."Montant T.V.A.".$separator."Montant T.T.C.".$separator."Transport H.T.".$separator."Transport T.V.A.".$separator."Transport T.T.C.";
	$csv_output .= "\n";

	//Boucle sur les resultats
	foreach($inscriptions as $key => $inscription) {
		
		$inscription["montant_transport"] = $inscription["montant_transport_arrivee"] + $inscription["montant_transport_depart"];
		//$inscription["montant_transport"] = 120;
		
		$csv_output .= $inscription["je_nom"].$separator;
		$csv_output .= $inscription["liste_date"].$separator;
		$csv_output .= $inscription["liste_places_max"].$separator;
		$csv_output .= $inscription["places_reservees"].$separator;
		$csv_output .= number_format($inscription["liste_montant"], 2, ".", " ").$separator;
		$csv_output .= number_format(get_tva($inscription["liste_montant"]), 2, ".", " ").$separator;
		$csv_output .= number_format(get_taxed_price($inscription["liste_montant"]), 2, ".", " ").$separator;
		$csv_output .= number_format($inscription["montant_transport"], 2, ".", " ").$separator;
		$csv_output .= number_format(get_tva($inscription["montant_transport"]), 2, ".", " ").$separator;
		$csv_output .= number_format(get_taxed_price($inscription["montant_transport"]), 2, ".", " ");
		$csv_output .= "\n";
	}
	
	header("Content-type: application/vnd.ms-excel");
	header("Content-disposition: attachment; filename=".date("Y-m-d")."-inscriptions-".rewrite_value($inscription["event_nom"]).".xls");
	print utf8_decode($csv_output);
	exit();
La cellule qui me pose problème est celle-ci :
$csv_output .= number_format(get_tva($inscription["montant_transport"]), 2, ".", " ").$separator;
En effet, dans mon tableau de test, number_format(get_tva($inscription["montant_transport"]), 2, ".", " ") vaut 11.76. Et lorsque j'ouvre mon tableau excel généré (via OpenOffice, mais ça sera je pense pareil en l'ouvrant via Excel), le logiciel comprend que 11.76 est une date, et me le formate en "01/11/1976".

Par contre, si je définie que number_format(get_tva($inscription["montant_transport"]), 2, ".", " ") vaut 20.21 par exemple, le logiciel le reconnait bien comme un float. D'un point de vue logique, je dirai qu'il suffit que la valeur entière de mon float soit supérieure à 12 (le nombre de mois dans l'année) pour qu'il soit reconnu en tant que float et non en tant que date.

Existe t-il un moyen de forcer un type de donnée, directement dans mon script ?

Mammouth du PHP | 568 Messages

25 févr. 2010, 12:16

Jamais réussit à trouver une solution à ce problème.

Maintenant, je n'utilise plus de CSV pour générer des fichiers excel, j'utilise l'excellente library PHPExcel (Cf. http://www.codeplex.com/PHPExcel/)

Avec ça, tu peux définir le type de données des cellules dans lesquels tu écrit (définir les couleurs de fond, écrire des formules, etc...)

Bon courage.

VaN
Mammouth du PHP | 1107 Messages

25 févr. 2010, 19:50

Bon je viens de mettre en place PHPExcel. Ça fait quand même pas mal usine à gaz, alors que j'ai juste défini des bordures, une couleur de fond et un format de cellule, mais bon : /

Au passage, je n'ai rien trouvé dans la doc concernant le fait de pouvoir fixer une colonne. Tu sais si c'est possible ?

Petit nouveau ! | 5 Messages

26 févr. 2010, 14:04

Oui c'est possible. On l'avait fait. Enfin, un colègue l'a fait, donc je ne peux te dire comment. Tu peux fixer une colonne, fusionner les cellules, etc...