[Résolu] Générer un download de fichier Excel.CSV à la v
-
- Tyrannosaurus Rex
- Messages : 3198
- Inscription : 20 juin 2008, 16:58
[Résolu] Générer un download de fichier Excel.CSV à la v
Bonjour,
Avant de jeter l'éponge et de passer par l'écriture d'un fichier temporaire, j'aimerais l'avis de ceux qui sont plus expérimentés que moi en PHP + MYSQL.
Contexte du problème : dans une base de donnée, j'ai des enregistrements de statistiques. Pas de problème pour la requête pour effectuer l'extraction appropriée. Je voudrais maintenant pouvoir donner à l'utilisateur la possibilité de charger les données dans EXCEL (ou OpenOffice) pour manipulation en local. Mon problème est que j'ignore comment générer le download de ce fichier.csv à partir de ma boucle sur mysql_fetch_row lors de l'affichage de la page après appui sur le bouton ad'hoc.
L'un d'entre vous aurait-il un lien expliquant ce genre de manipulation (je n'ai pas trouvé dans manuelPHP).
Merci d'avance,
Jacques
Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7
Avant de jeter l'éponge et de passer par l'écriture d'un fichier temporaire, j'aimerais l'avis de ceux qui sont plus expérimentés que moi en PHP + MYSQL.
Contexte du problème : dans une base de donnée, j'ai des enregistrements de statistiques. Pas de problème pour la requête pour effectuer l'extraction appropriée. Je voudrais maintenant pouvoir donner à l'utilisateur la possibilité de charger les données dans EXCEL (ou OpenOffice) pour manipulation en local. Mon problème est que j'ignore comment générer le download de ce fichier.csv à partir de ma boucle sur mysql_fetch_row lors de l'affichage de la page après appui sur le bouton ad'hoc.
L'un d'entre vous aurait-il un lien expliquant ce genre de manipulation (je n'ai pas trouvé dans manuelPHP).
Merci d'avance,
Jacques
Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7
Dernière modification par Jacques-64 le 10 mars 2009, 21:45, modifié 1 fois.
Question t'as déjà fais du PHP ? (histoire de voir s'il faut t'écrire tout l'algo)
En java j'avais fait ça :
Après, il suffit d'adapter.
Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr-FR; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7
En java j'avais fait ça :
Code : Tout sélectionner
for (ArrayList<String> ligne: table) {
String ligneTxt = ""; // création d'un nouvelle ligne
for (String champ : ligne) {
// si il trouve des double quotes il les protèges
if (champ != null && champ.indexOf("\"") != -1) {
champ = Str.str_replace("\"", "\"\"", champ);
} else if (champ == null) {
champ = "";
}
// ajoute le champ
if (!ligneTxt.equals("")) ligneTxt += ";";
ligneTxt += "\""+champ+"\"";
}
// on ajoute la ligne
CSV += ligneTxt+"\n";
}
Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr-FR; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7
Mon blog de dév web ― Thème pour le forum Geckozone ― Le clavier Latin-9 fr sous Windows ― Raccourcis clavier pour Firefox
Debian 8 KDE avec Firefox & Nightly
Debian 8 KDE avec Firefox & Nightly
-
- Tyrannosaurus Rex
- Messages : 3198
- Inscription : 20 juin 2008, 16:58
Bonjour et merci,
Pour répondre à la question, j'ai fait "un peu" de PHP mais n'en maitrise pas tous les aspects.
Pour l'instant, mon code qui affiche (en vrac) à partir d'un fichier de test :
dans lequel je ne vois pas où insérer le JS (que je maitrise beaucoup moins) pour écrire en local un fichier à ouvrir par le logiciel choisi par l'utilisateur.
A+
Jacques
Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7
Pour répondre à la question, j'ai fait "un peu" de PHP mais n'en maitrise pas tous les aspects.
Pour l'instant, mon code qui affiche (en vrac) à partir d'un fichier de test :
Code : Tout sélectionner
while ($Tableau=mysql_fetch_row($SQLresult) ) {
?> <table style="text-align: center; width: 90%;" border="1"
cellpadding="2" cellspacing="2">
<tbody>
<?php
foreach ($Tableau as $index => $cellule) {
if ($cellule != ""){
echo "<tr><td>$nomsItems[$index] :</td><td>";
echo StripSlashes ($cellule) ;
echo "</td></tr>";
} // Cellule non vide
} // fin for each cellule
echo '</tbody></table><br>';
} // fin while fetch_row
A+
Jacques
Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7
C'est pas du JS mais du Java.
Déjà c'est pas avec un tableau que tu va faire du CSV.
C'est plus un truc comme ça.
Après il faut ajouter dans le header, en début de programme, que tu veux que ça soit télécharger et non visualiser dans le navigateur.
Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr-FR; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7 (.NET CLR 3.5.30729)
Déjà c'est pas avec un tableau que tu va faire du CSV.
C'est plus un truc comme ça.
Code : Tout sélectionner
while ($Tableau = mysql_fetch_row($SQLresult) ) {
$ligne = arrya();
foreach ($Tableau as $index => $cellule) {
if (!empty($cellule){
$ligne[] = '"'.str_replace('"', '""', $cellule).'"';
} else {
$ligne[] = echo '""';
}
}
echo implode (';', $ligne)."\n";
}
Code : Tout sélectionner
header("Content-Type: application/force-download; name=\"stats.csv\"");
header("Content-Transfer-Encoding: binary");
header("Content-Disposition: attachment; filename=\"stats.csv\"");
header("Expires: 0");
header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
Mon blog de dév web ― Thème pour le forum Geckozone ― Le clavier Latin-9 fr sous Windows ― Raccourcis clavier pour Firefox
Debian 8 KDE avec Firefox & Nightly
Debian 8 KDE avec Firefox & Nightly
-
- Tyrannosaurus Rex
- Messages : 3198
- Inscription : 20 juin 2008, 16:58
Merci,
Pour le tableau, c'était une première étape pour visualiser les résultats sur mon fichier de test. Je pense qu'avec cela je vais pouvoir m'en sortir. Le fait que tout soit en PHP m'arrange.
Je marquerais comme résolu si je m'en sort dans un délai raisonnable, sinon, je reviens exposer mes lacunes.
Adishatz
Jacques
Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7
Pour le tableau, c'était une première étape pour visualiser les résultats sur mon fichier de test. Je pense qu'avec cela je vais pouvoir m'en sortir. Le fait que tout soit en PHP m'arrange.
Je marquerais comme résolu si je m'en sort dans un délai raisonnable, sinon, je reviens exposer mes lacunes.
Adishatz
Jacques
Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7
Zefling a écrit :Code : Tout sélectionner
header("Content-Type: application/force-download; name="stats.csv"");[/quote]C'est plutôt text/csv pour du CSV. Le "Content-disposition:attachment" suffira à lancer le téléchargement.
-
- Tyrannosaurus Rex
- Messages : 3198
- Inscription : 20 juin 2008, 16:58
calimo a écrit :Zefling a écrit :Code : Tout sélectionner
header("Content-Type: application/force-download; name="stats.csv"");[/quote]C'est plutôt text/csv pour du CSV. Le "Content-disposition:attachment" suffira à lancer le téléchargement.[/quote] Faut dire j'avais fait ça pour que ça téléchargement n'importe quel type de fichier sans se poser de question. Pour beaucoup, j'avais pas moyen de connaitre le Content-Type. [size=75]Message envoyé avec : [color=olive]Mozilla/5.0 (Windows; U; Windows NT 5.1; fr-FR; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7 (.NET CLR 3.5.30729)[/color][/size]
Mon blog de dév web ― Thème pour le forum Geckozone ― Le clavier Latin-9 fr sous Windows ― Raccourcis clavier pour Firefox
Debian 8 KDE avec Firefox & Nightly
Debian 8 KDE avec Firefox & Nightly
Je me rends compte, attention à ça aussi :
Le ; dans du CSV passe très bien dans MS Excel en français, attention à d'autres logiciels. OO.o permet de choisir le séparateur, donc c'est bon, mais d'autres ne le supportent pas ; je ne sais pas ce qu'il en est dans excel en anglais.Zefling a écrit :Code : Tout sélectionner
echo implode (';', $ligne)."\n";
-
- Tyrannosaurus Rex
- Messages : 3198
- Inscription : 20 juin 2008, 16:58
calimo a écrit :Je me rends compte, attention à ça aussi :Le ; dans du CSV passe très bien dans MS Excel en français, attention à d'autres logiciels. OO.o permet de choisir le séparateur, donc c'est bon, mais d'autres ne le supportent pas ; je ne sais pas ce qu'il en est dans excel en anglais.Zefling a écrit :Code : Tout sélectionner
echo implode (';', $ligne)."\n";


C'est un exemple après faut adapter. Moi c'était pour Ms Excel Fr donc j'ai fais ce que qu'on m'avait demandé.

Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr-FR; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7 (.NET CLR 3.5.30729)
Mon blog de dév web ― Thème pour le forum Geckozone ― Le clavier Latin-9 fr sous Windows ― Raccourcis clavier pour Firefox
Debian 8 KDE avec Firefox & Nightly
Debian 8 KDE avec Firefox & Nightly
-
- Tyrannosaurus Rex
- Messages : 3198
- Inscription : 20 juin 2008, 16:58
Bonsoir,
Pour ma part, cette aide m'a été précieuse. J'ai juste eu besoin de rajouter un paramètre dans le reste de mon code pour que cela fonctionne correctement (chez moi). reste à voir si chez ceux qui vont l'utiliser les paramètres FF et IE seront bons du premier coup
A+
Jacques
Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9.1b2) Gecko/20081201 Firefox/3.1b2
Pour ma part, cette aide m'a été précieuse. J'ai juste eu besoin de rajouter un paramètre
Code : Tout sélectionner
target="blank"

A+
Jacques
Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9.1b2) Gecko/20081201 Firefox/3.1b2
Il faut bien que quelqu'un le fasseZefling a écrit :Monsieur chipote.
![]()

Il n'y a pas de spécification officielle, juste une info : http://tools.ietf.org/html/rfc4180 Je me rends compte que l'utilisation du point-virgule n'y est même pas mentionnée. Mais comme ce n'est qu'une info...Zefling a écrit :C'est un exemple après faut adapter. Moi c'était pour Ms Excel Fr donc j'ai fais ce que qu'on m'avait demandé.Après je connais pas les spécifications CSV à la lettre (surtout que je ne m'en sert jamais).

Bizarre, et assez ennuyeux pour l'utilisateur qui doit ensuite fermer l'onglet, non ?Jacques-64 a écrit :Pour ma part, cette aide m'a été précieuse. J'ai juste eu besoin de rajouter un paramètredans le reste de mon code pour que cela fonctionne correctement (chez moi).Code : Tout sélectionner
target="blank"
C'est si compliqué de remplacer le ; du code pour mettre un , à la place ?calimo a écrit :Il faut bien que quelqu'un le fasseZefling a écrit :Monsieur chipote.
![]()
(ayant moi-même eu quelques ennuis liés à ça)

Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr-FR; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7 (.NET CLR 3.5.30729)
Mon blog de dév web ― Thème pour le forum Geckozone ― Le clavier Latin-9 fr sous Windows ― Raccourcis clavier pour Firefox
Debian 8 KDE avec Firefox & Nightly
Debian 8 KDE avec Firefox & Nightly
-
- Tyrannosaurus Rex
- Messages : 3198
- Inscription : 20 juin 2008, 16:58
Bonjour,
Autrement, si on se trompe, Excel ou OOo permettent de répartir la cellule dans celles qui suivent fonction du séparateur. Le problème est plus complexe s'il y a des valeurs numériques avec décimale.
A+
Jacques
Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7
Pas d'onglet à refermer puisque cela n'ouvre que la boite de dialogue "ouvrir / enregistrer" en laissant la page d'origine.calimo a écrit :Bizarre, et assez ennuyeux pour l'utilisateur qui doit ensuite fermer l'onglet, non ?
Il suffit d'ajouter une série de "boutons radio" contenant "," ";" et "tabulation" pour donner le choix à l'utilisateur. A partir du moment où on se lance dans la construction de requêtes MySql, c'est assez simple.calimo a écrit :Le ; dans du CSV passe très bien dans MS Excel en français, attention à d'autres logiciels. OO.o permet de choisir le séparateur, donc c'est bon, mais d'autres ne le supportent pas ; je ne sais pas ce qu'il en est dans excel en anglais.
Autrement, si on se trompe, Excel ou OOo permettent de répartir la cellule dans celles qui suivent fonction du séparateur. Le problème est plus complexe s'il y a des valeurs numériques avec décimale.
A+
Jacques
Message envoyé avec : Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9.0.7) Gecko/2009021910 Firefox/3.0.7
Qui est en ligne ?
Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 5 invités