Ecriture d'une fichier xls en dynamique

Soyez le premier à donner votre avis sur cette source.

Snippet vu 8 736 fois - Téléchargée 17 fois

Contenu du snippet

Aprés des longues recherches sur le web pour écrire un fichier xls en éxtraire les données de ma base MySQL, j'ai rien trouvé de simple pour mon probléme,
j'ai trouvé des classes et des modules qui sont vraiment compliqués, alors j'ai penser de le faire toute seul et aprés des longues recherches j'ai trouver la solution et j'aime que tt le monde en bénéfit ;+)
N'oublions pas les droits d'ecriture sous le dossier upload

Source / Exemple :


<?php

require_once('vos fichiers de connexion a la base');

		$bdN1=new BD (USER, PASS, BASE, SERVER); //connexion à la base
					if ($bdN1->enErreur()) exit;
							$rsListeN1= $bdN1->execRequete("SELECT * FROM votretable");
							
					if ($bdN1->enErreur()) exit;
					$ligne = mysql_num_rows($rsListeN1);
					if ($ligne != 0) { 
				
					$cliste="<html xmlns:x=\"urn:schemas-microsoft-com:office:excel\">";
					$cliste=$cliste."<head>";
					$cliste=$cliste."<!--[if gte mso 9]><xml>";
					$cliste=$cliste."<x:ExcelWorkbook>";
					$cliste=$cliste."<x:ExcelWorksheets>";
					$cliste=$cliste."<x:ExcelWorksheet>";
					$cliste=$cliste."<x:Name>Liste des inscriptions</x:Name>";
					$cliste=$cliste."<x:WorksheetOptions>";
					$cliste=$cliste."<x:Print>";
					$cliste=$cliste."<x:ValidPrinterInfo/>";
					$cliste=$cliste."</x:Print>";
					$cliste=$cliste."</x:WorksheetOptions>";
					$cliste=$cliste."</x:ExcelWorksheet>";
					$cliste=$cliste."</x:ExcelWorksheets>";
					$cliste=$cliste."</x:ExcelWorkbook>";
					$cliste=$cliste."</xml>";
					$cliste=$cliste."<![endif]-->";
					$cliste=$cliste."</head>";
					$cliste=$cliste."<body>";
					$cliste=$cliste."<table>";
					$cliste=$cliste."<tr>";
					$cliste=$cliste."<td width=200 height=40>";
					$cliste=$cliste."<b>Civilité</b>";								
					$cliste=$cliste."</td>";
					$cliste=$cliste."<td width=200 height=40>";
					$cliste=$cliste."<b>NOM</b>";								
					$cliste=$cliste."</td>";
					$cliste=$cliste."<td width=200 height=40>";
					$cliste=$cliste."<b>Prénom</b>";								
					$cliste=$cliste."</td>";
					$cliste=$cliste."<td width=200 height=40>";
					$cliste=$cliste."<b>Email</b>";								
					$cliste=$cliste."</td>";
					$cliste=$cliste."<td width=200 height=40>";
					$cliste=$cliste."<b>Login</b>";								
					$cliste=$cliste."</td>";
					$cliste=$cliste."<td width=200 height=40>";
					$cliste=$cliste."<b>Mot de passe</b>";				
					$cliste=$cliste."</td>";
					$cliste=$cliste."<td width=200 height=40>";
					$cliste=$cliste."<b>Etat</b>";				
					$cliste=$cliste."</td>";
					$cliste=$cliste."<td width=200 height=40>";
					$cliste=$cliste."<b>Partenaire</b>";
					$cliste=$cliste."</td>";
					$cliste=$cliste."<td width=200 height=40>";
					$cliste=$cliste."<b>Atelier 1</b>";
					$cliste=$cliste."</td>";
					$cliste=$cliste."<td width=200 height=40>";
					$cliste=$cliste."<b>Atelier 2</b>";
					$cliste=$cliste."</td>";
					$cliste=$cliste."</tr>";

					
					while ($EnregN1=$bdN1->objetSuivant($rsListeN1)){
					
							$civilite=$EnregN1->civilite; // les enregistrements de ma base
							$nom=$EnregN1->nom;
							$prenom=$EnregN1->prenom;
							$email=$EnregN1->email;
							$login=$EnregN1->login;
							$passe=$EnregN1->passe;
							$etat=$EnregN1->etat;
							$partenaire=$EnregN1->partenaire;
							$atelier1=$EnregN1->Atelier1;
							$atelier2=$EnregN1->Atelier2;
							
							
							$cliste=$cliste."<tr>";
							$cliste=$cliste."<td width=200 height=40>";
							$cliste=$cliste."". $civilite;							
							$cliste=$cliste."</td>";
							$cliste=$cliste."<td width=200 height=40>";
							$cliste=$cliste."" . $nom;								
							$cliste=$cliste."</td>";
							$cliste=$cliste."<td width=200 height=40>";
							$cliste=$cliste."". $prenom;							
							$cliste=$cliste."</td>";
							$cliste=$cliste."<td width=200 height=40>";
							$cliste=$cliste."" . $email;								
							$cliste=$cliste."</td>";
							$cliste=$cliste."<td width=200 height=40>";
							$cliste=$cliste."". $login;							
							$cliste=$cliste."</td>";
							$cliste=$cliste."<td width=200 height=40>";
							$cliste=$cliste."" . $passe;								
							$cliste=$cliste."</td>";
							$cliste=$cliste."<td width=200 height=40>";
							$cliste=$cliste."". LibEtat($etat);							
							$cliste=$cliste."</td>";
							$cliste=$cliste."<td width=200 height=40>";
							$cliste=$cliste."" . $partenaire;								
							$cliste=$cliste."</td>";
							$cliste=$cliste."<td width=200 height=40>";
							$cliste=$cliste."". Atelier1($atelier1);							
							$cliste=$cliste."</td>";
							$cliste=$cliste."<td width=200 height=40>";
							$cliste=$cliste."" . Atelier1($atelier2);								
							$cliste=$cliste."</td>";
                            $cliste=$cliste."</tr>";
							
					
							
						}
						
						
						
						$cliste=$cliste."</table></body></html>";
									$name="MaTable";
									// Création du fichier txt
									$Name = ($name.".xls"); 
									//Définir le fichier qui nous intéresse et ou on va l'emplacé 
									$Fnm = "../upload/$Name"; 
									//Ouvrir le fichier en mode écriture
									$inF = fopen($Fnm,"w");
									// La position du pointeur est dans :  
									$ptr = ftell($inF); 
									//et est modifiable par : 
									$ptr = fseek($inF,$ptr-10); 
									//Ensuite écrire simplement  
									fwrite($inF,$cliste);
									//pour passer à la ligne, écrire \n 
									//fputs($inF,$cliste."\n"); 
									//Enfin fermer le fichier 
									fclose($inF);
 									
									
									
				$bdN1->quitter();}
				else{echo"Il n'y a aucun enregistrement!";
				$bdN1->quitter();}
								
									
			

?>

Conclusion :


Bon courage

A voir également

Ajouter un commentaire

Commentaires

Messages postés
4
Date d'inscription
samedi 18 août 2007
Statut
Membre
Dernière intervention
13 avril 2009

merci
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
61
de l'XML, oui, pas de XSL...
au pire, Excel sais le charger, a voir a partir de quelle version....

y'a des années, j'avais fait en php un truc pour écrire de l'excel, aussi, en SYLK, ça c'était galère ^^ mais ca passait sur tous les Excel :p
Messages postés
239
Date d'inscription
vendredi 20 octobre 2006
Statut
Membre
Dernière intervention
20 avril 2009

Salut,

J'ai du louper quelque chose, mais ca ne ressemble pas vraiment a du .xls...
Peut-etre qu'Excel est capable d'ouvrir ca et de le convertir, mais ca ressemble beaucoup a du html :o)

Accessoirement, plutot que lister les champs de tes tables en dur, tu devrais utiliser les API de description genre mysql_fetch_field()ou bien au pire essayer un truc genre :
foreach($EnregN1 as $value)
...qui diviserait la taille de ton code par environ 10 (le nombre de colonnes de ta table).
De plus, ton code qui ecrit dans le fichier est un peu brouillon (Utiliser des variables $name et $Name va sans doute t'ammener a faire des erreurs un jour ou l'autre, $ptr est inutilise...).

Une derniere remarque: Ton code est trop lie a ta base de donnees.
Si vraiment le but est de faire des fichiers Excel, tu aurais pu creer une classe ExcelFile avec des methodes genre AddLine() ou Flush().
Ce serait beaucoup plus simple a reutiliser.

Tu aussi pourrais simplement ecrire dans la sortie standard (avec print ou echo). Avec les bonnes directives header(), le navigateur interpreterait ton script comme du Xls et passerait tout seul le controle a Excel sur le poste client (ou proposerait de l'enregistrer selon sa config).
Un autre avantage d'ecrire directement: Si ta table contient 50000000 de records, le serveur ne te jetera pas avec un "out of memory".

Sinon je confirme qu'utiliser du CSV ici aurait pratiquement fait la meme chose (sauf peut-etre si tu fusionnes des cellules dans ta table HTML et que Excel est capable de garder ce formatage, ou si tu changes les couleurs).

Ah oui, si tu pouvais faire quelque chose pour l'indentation de ton source... Ce n'est pas grand chose, mais ca augmente beaucoup la facilite de comprehension :o)

A+,
Eric

NB: Par contre, pour le niveau Expert... je crois qu'il faudrait revoir ca un peu a la baisse :o)
Messages postés
488
Date d'inscription
samedi 5 avril 2003
Statut
Membre
Dernière intervention
31 mars 2009
3
Salut,

Ne te braque pas à la moindre remarque que l'on fait à ton code, surtout lorsque les commentaires sont constructifs et argumentés.

Nous voulions juste t'expliquer que ton code ne tire en aucun cas profit du format XLS. Il aurait fallu utiliser un format d'échange plus neutre comme le CSV qui est vierge de mise en forme, plus léger et qui assure une meilleure comptabilité entre les logiciels de tableurs. En effet, le XLS est un format propriétaire de Windows. Bien qu'il soit lu par la majorité des logiciels de bureautique, rien ne t'assure qu'il sera supporté par un nouveau logiciel. Avec le CSV c'est plus sûr du fait de sa simplicité.

++
Messages postés
5
Date d'inscription
mardi 15 novembre 2005
Statut
Membre
Dernière intervention
29 août 2008

Primo c'est pas un fichier csv c'est un fichier xls et je pense que mon code est trés clair moi chui pas spécialiste mais j'avais juste l'idée d'aider les gens
Afficher les 7 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.