Export PHP => Excel, float reconnu comme une date

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Export PHP => Excel, float reconnu comme une date

Re: Export PHP => Excel, float reconnu comme une date

par Chklang » 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...

Re: Export PHP => Excel, float reconnu comme une date

par VaN » 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 ?

Re: Export PHP => Excel, float reconnu comme une date

par Yosh » 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.

Export PHP => Excel, float reconnu comme une date

par VaN » 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 ?