Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > Bureautique
Bureautique Forum d'entraide sur la gestion dynamique de documents de bureautique (Word, Excel, OpenOffice...) avec PHP. Avant de poster -> Cours Excel, FAQ OpenXML, FAQ OpenDocument
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/05/2006, 10h22   #1
Membre à l'essai
 
Inscription : avril 2005
Messages : 101
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 101
Points : 21
Points : 21
Par défaut PHP --> Excel

En fait je voudrais que l’utilisateur puisse télécharger un fichier au format excel avec le résultat d’une requete access (qui contient 10000 lignes environ c’est pour ca que je ne veux pas l’afficher directement sur ma page php) donc je voulais savoir si c’est possible de le faire directement sur php (si oui comment parce que j’en ai vraiment aucune idée…) ou si non comment faire autrement ! ! merci d’avance pour vos réponses !En gros l'idée c'es ca: si l'utilisateur choisit de télécharger le fichier, php copie le résultat d'une requete (un tableau en l'occurence) dans un fichier excel.
merci de vos réponses!
cciocc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2006, 10h25   #2
Rédacteur
 
Avatar de Swoög
 
Inscription : janvier 2003
Messages : 6 053
Détails du profil
Informations personnelles :
Âge : 24

Informations forums :
Inscription : janvier 2003
Messages : 6 053
Points : 7 144
Points : 7 144
Envoyer un message via MSN à Swoög Envoyer un message via Skype™ à Swoög
Salut !

pour la génération du fichier Excel, http://fr.php.net/com ou recherche sur le forum

pour le téléchargement, recherche téléchargement forcé sur le forum ou sur google

Les deux demandes sont très très très courantes
__________________
Rédacteur "éclectique" (XML, IRC, Web...)
Les Règles du Forum - Mon Site Web sur DVP.com (Développement Web, PHP, (X)HTML/CSS, SQL, XML, IRC)
je ne répondrai à aucune question technique via MP, MSN ou Skype : les Forums sont là pour ça !!! Merci de me demander avant de m'ajouter à vos contacts sinon je bloque !
pensez à la balise [code] (bouton #) et au tag (en bas)
Swoög est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2006, 10h52   #3
Membre expérimenté
 
Développeur Web
Inscription : avril 2006
Messages : 430
Détails du profil
Informations personnelles :
Localisation : Belgique

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : avril 2006
Messages : 430
Points : 538
Points : 538
Comme je l'ai déjà fait avant, je le conseille encore une fois

Ce package PEAR est vraiment très pratique pour la génération de fichiers Excel:

http://pear.php.net/package/Spreadsheet_Excel_Writer
bkill est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/05/2006, 11h00   #4
Membre à l'essai
 
Inscription : avril 2005
Messages : 101
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 101
Points : 21
Points : 21
Bonjour, j'ai telecharger le package dont tu as parlé mais je n'ai pas tres bien compris son fonctionnement...
cciocc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2006, 09h38   #5
Membre à l'essai
 
Inscription : avril 2005
Messages : 101
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 101
Points : 21
Points : 21
J'ai effectué quelques recherches (y'a pas grand chose a ce sujet mais bon...) j'ai surtout trouvé ca : http://stephaneey.developpez.com/tutoriel/php/phpexcel/ (la partie 3 surtout)
mais en fait c'est beaucoup trop technique pour moi et y'a plusieurs choses que je comprends pas:
- le fichier excel est créé chez moi ou chez l'utilisateur?
- s'il est créé chez moi est il possible de faire en sorte qu'il soit créer que chez l'utilisateur?
- moi je voudrais juste copier coller le résultat de la requete dans excel, il n'y a ni mise en forme ni calcul, y'a pas quelque chose de plus simple? ou alors quelqu'un peut il m'aider a simplifier ce code pour mon cas?
merci d'avance de vos réponses et de votre aide...
cciocc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2006, 14h14   #6
Membre éprouvé
 
Inscription : février 2004
Messages : 456
Détails du profil
Informations forums :
Inscription : février 2004
Messages : 456
Points : 428
Points : 428
Salut,

dans un autre style (bcp + simple), tu peux construire une tableau html que tu remplis avec tes données et l'enregistrer dans un fichier excel.

Va voir ici, jlavais déjà expliqué à qlq'un d'autre.
billoum est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2006, 15h21   #7
Membre à l'essai
 
Inscription : avril 2005
Messages : 101
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 101
Points : 21
Points : 21
en fait mon probléme c'est que c'est des requetes de 10000 lignes et donc les faire afficher en html ca fait lourd... mais si tu me dis que c'est bon! je veux bien essayer...
cciocc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2006, 15h37   #8
Membre éprouvé
 
Inscription : février 2004
Messages : 456
Détails du profil
Informations forums :
Inscription : février 2004
Messages : 456
Points : 428
Points : 428
Tu ne dois pas afficher le tableau à l'écran, juste l'enregsitrer dans le fichier .xls.

Je n'ai jamais testé ce script avec autant de ligne mais comme c pas très compliqué, ca vaut le coup de tenter.

En résumé, tu fais comme ça (en construisant ton tab évidemment):

Code :
1
2
3
4
5
6
7
8
9
10
11
<?php
header("Content-Type: application/vnd.ms-excel");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("content-disposition: attachment;filename=test.xls");
 
$text = "<table>";
$text .= "<tr><td>Contact</td></tr>";
$text .= "</table>";
echo $text;
?>
Et tu auras une boite de dialogue pour enregistrer le fichier qui va apparaitre.
billoum est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2006, 09h12   #9
Membre à l'essai
 
Inscription : avril 2005
Messages : 101
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 101
Points : 21
Points : 21
C'est clair que le code que tu m'as donné il est bien pratique... par contre mon problème c’est que je récupère les données de la table avec ca :
Code :
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
 
<table>
<tr>
<th><h3> Identifiant </th> <th><h3> Nom </th> 
<th><h3> Complément </th> <th><h3> Adresse </th> 
<th><h3> Ville </th> <th><h3> Téléphone </th> 
<th><h3> Fax </th></tr>
<?
$req_sql = " SELECT adm.* 
  FROM pai INNER JOIN adm ON pai.NO_EXTERNE = adm.[NUM+RO_DE_] 
  WHERE pai.CATEGORIE=30 AND pai.MAX_DIRRES=0 
  ORDER BY pai.MONTANT DESC;"; 
$sql = @odbc_exec($cnx, $req_sql); 
while(odbc_fetch_row($sql)){ 
  echo "<TR>"; 
  echo "<TD><h5>".odbc_result($sql, 1)."</TD>"; 
  echo "<TD><h5>".odbc_result($sql, 2)." ";
  echo odbc_result($sql, 3)."</TD>";
  echo "<TD><h5>".odbc_result($sql, 4)." ";
  echo odbc_result($sql, 5)."</TD>";
  echo "<TD><h5>".odbc_result($sql, 6)." ";
  echo odbc_result($sql, 7)." ";
  echo odbc_result($sql, 8)."</TD>";
  echo "<TD><h5>".odbc_result($sql, 9)." ";
  echo odbc_result($sql, 10)."</TD>";
  echo "<TD><h5>".odbc_result($sql, 11)."</TD>";
  echo "<TD><h5>".odbc_result($sql, 12)."</TD>";
}
?>
</table>
comment l’insérer dans ton code? Merci d’avance
cciocc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2006, 10h21   #10
Membre à l'essai
 
Inscription : avril 2005
Messages : 101
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 101
Points : 21
Points : 21
Voici ce que j'ai fait :
Code :
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
<?php
header("Content-Type: application/vnd.ms-excel");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("content-disposition: attachment;filename=test.xls");
$cnx = odbc_connect( "POLE_STAT_DEMAT" , "" , "" ) 
or die ("Attention, connexion à la base de donnée impossible<p>");
$text = "<table>";
$text = "<tr><th><h3> Identifiant </th> <th><h3> Nom </th> 
<th><h3> Complément </th> <th><h3> Adresse </th> 
<th><h3> Ville </th> <th><h3> Téléphone </th> 
<th><h3> Fax </th></tr>";
$req_sql = " SELECT TOP 10 adm.* 
FROM pai INNER JOIN adm 
ON pai.NO_EXTERNE = adm.[NUM+RO_DE_] 
WHERE pai.CATEGORIE=30 AND pai.MAX_DIRRES=0 
ORDER BY pai.MONTANT DESC;"; 
$sql = @odbc_exec($cnx, $req_sql); 
$text = "while(odbc_fetch_row($sql)){ 
echo "<TR>";
echo "<TD><h5>".odbc_result($sql, 1)."</TD>"; 
echo "<TD><h5>".odbc_result($sql, 2)." ";
echo odbc_result($sql, 3)."</TD>";
echo "<TD><h5>".odbc_result($sql, 4)." ";
echo odbc_result($sql, 5)."</TD>";
echo "<TD><h5>".odbc_result($sql, 6)." ";
echo odbc_result($sql, 7)." ";";
echo odbc_result($sql, 8)."</TD>";";
echo "<TD><h5>".odbc_result($sql, 9)." ";
echo odbc_result($sql, 10)."</TD>";";
echo "<TD><h5>".odbc_result($sql, 11)."</TD>";
echo "<TD><h5>".odbc_result($sql, 12)."</TD>";
}";
$text = "</table>";
echo $text;
?>
mais ca marche pas... si quelqu'un a une idée!
cciocc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2006, 11h34   #11
Membre éprouvé
 
Inscription : février 2004
Messages : 456
Détails du profil
Informations forums :
Inscription : février 2004
Messages : 456
Points : 428
Points : 428
Quand tu fais :
Code :
1
2
3
4
5
$text = "<table>";
$text = "<tr><th><h3> Identifiant </th> <th><h3> Nom </th> 
<th><h3> Complément </th> <th><h3> Adresse </th> 
<th><h3> Ville </th> <th><h3> Téléphone </th> 
<th><h3> Fax </th></tr>";
La deuxième ligne efface le contenu de la première. Tu dois utiliser la concaténation (avec le point '.'):

Code :
1
2
3
4
5
$text = "<table>";
$text .= "<tr><th><h3> Identifiant </th> <th><h3> Nom </th> 
<th><h3> Complément </th> <th><h3> Adresse </th> 
<th><h3> Ville </th> <th><h3> Téléphone </th> 
<th><h3> Fax </th></tr>";
Puis la boucle pour parcourir tes enregistrements:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
while(odbc_fetch_row($sql))
{ 
$text .= "<TR>";
$text .= "<TD><h5>".odbc_result($sql, 1)."</TD>"; 
$text .= "<TD><h5>".odbc_result($sql, 2)." ";
$text .= odbc_result($sql, 3)."</TD>";
$text .= "<TD><h5>".odbc_result($sql, 4)." ";
$text .= odbc_result($sql, 5)."</TD>";
$text .= "<TD><h5>".odbc_result($sql, 6)." ";
$text .= odbc_result($sql, 7)." ";";
$text .= odbc_result($sql, 8)."</TD>";";
$text .= "<TD><h5>".odbc_result($sql, 9)." ";
$text .= odbc_result($sql, 10)."</TD>";";
$text .= "<TD><h5>".odbc_result($sql, 11)."</TD>";
$text .= "<TD><h5>".odbc_result($sql, 12)."</TD></TR>";
}
 
$text.='</table>';
 
echo $text;
billoum est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2006, 12h55   #12
Membre à l'essai
 
Inscription : avril 2005
Messages : 101
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 101
Points : 21
Points : 21
Ok c'est bon ca marche, merci beaucoup billoum
voila le code si ca interesse quelqu'un:

Code :
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
 
<?php
$cnx = odbc_connect( "POLE_STAT_DEMAT" , "" , "" );
header("Content-Type: application/vnd.ms-excel");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("content-disposition: attachment;filename=test.xls");
$text = "<table border=1>";
$text .= "<tr><th><h3> Identifiant </th> <th><h3> Nom </th>
<th><h3> Complément </th> <th><h3> Adresse </th> 
<th><h3> Ville </th> <th><h3> Téléphone </th> 
<th><h3> Fax </th></tr>";
$cnx = odbc_connect( "POLE_STAT_DEMAT" , "" , "" );
$req_sql = " SELECT TOP 10 adm.* 
  FROM pai INNER JOIN adm ON pai.NO_EXTERNE = adm.[NUM+RO_DE_] 
  WHERE pai.CATEGORIE=30 AND pai.MAX_DIRRES=0 
  ORDER BY pai.MONTANT DESC;"; 
$color = "#c0ffe0";
while(odbc_fetch_row($sql)){ 
  if($color=="#e0ffff"){$color = "#c0ffe0";}else{$color = "#e0ffff";}
$sql = @odbc_exec($cnx, $req_sql);
while(odbc_fetch_row($sql))
{ 
$text .= "<TR>";
$text .= "<TD><h5>".odbc_result($sql, 1)."</TD>"; 
$text .= "<TD><h5>".odbc_result($sql, 2)." ";
$text .= odbc_result($sql, 3)."</TD>";
$text .= "<TD><h5>".odbc_result($sql, 4)." ";
$text .= odbc_result($sql, 5)."</TD>";
$text .= "<TD><h5>".odbc_result($sql, 6)." ";
$text .= odbc_result($sql, 7)." ";
$text .= odbc_result($sql, 8)."</TD>";
$text .= "<TD><h5>".odbc_result($sql, 9)." ";
$text .= odbc_result($sql, 10)."</TD>";
$text .= "<TD><h5>".odbc_result($sql, 11)."</TD>";
$text .= "<TD><h5>".odbc_result($sql, 12)."</TD></TR>";
}
$text .="</table>";
echo $text;
?>
sinon je pense pas que ce soit possible mais est ce qu'on peut changer le format de cellule dans php? exemple: je veux faire ressortir des numéros de téléphone mais ca sort comme ca: 4,39E+08 au lieu de 0439... donc voila si quelqu'un sait merci de m'aider! (je peux pas laisser l'affichage comme ca, c'est destiné a des secrétaires qui doivent voir au premier coup d'oeil quoi correspond a quoi... en plus j'ai plusieurs colones qui ont ce problème)
cciocc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2006, 13h27   #13
Membre éprouvé
 
Inscription : février 2004
Messages : 456
Détails du profil
Informations forums :
Inscription : février 2004
Messages : 456
Points : 428
Points : 428
Essaie en mettant <td width='auto'>. Ca changera pas le format (ca reste du texte) mais je pense que ca affichera le contenu de la cellule en entier.
billoum est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2006, 13h37   #14
Membre à l'essai
 
Inscription : avril 2005
Messages : 101
Détails du profil
Informations forums :
Inscription : avril 2005
Messages : 101
Points : 21
Points : 21
merci, ca élargit les colonnes mais le problème reste sensiblement le meme: l'identifiant (15 chiffres environ) est toujours sous forme scientifique (malgré la largeur de la colonne) et il manque le premier 0 du numéro de téléphone... ce serait vraiment bien que tout soit parfait mais bon si y'a pas moyen...
cciocc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2006, 13h52   #15
Membre éprouvé
 
Inscription : février 2004
Messages : 456
Détails du profil
Informations forums :
Inscription : février 2004
Messages : 456
Points : 428
Points : 428
Ime semblait bien que j'avais eu le même problème.

Bon ca reste du bricolage mais tu peux essaier en encadrant ce champ avec des guillemets, pour forcer excel à le considerer comme une chaine de caractère.
billoum est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 18h29.


 
 
 
 
Partenaires

Hébergement Web