pb export php ==> excel

Répondre
enricall
le 17/11/2006 à 20:21
enricall
salut a tous,

voila je voudrai convertir des champs d'une base sql en fichier excel

voila le code

//Premiere ligne = nom des champs
$csv_output = "a,b,c";
$csv_output .= "n";

//Requete SQL
$query = "SELECT a,b,c FROM table_reporting order by id asc " ;
$result = mysql_query($query)
or die('Erreur SQL !' . $query . '' . mysql_error());

//Boucle sur les resultats
while($row = mysql_fetch_array($result)) {
$csv_output .= "$row[a] $row,$row[c]n";
}

header("Content-type: application/vnd.ms-excel");
header("Content-disposition: attachment; filename=essai.xls");
print $csv_output;
exit;

le fichier se creer mais toutes les valeurs sont dans un même champ ?

j'aimerai bien que dans mon tableau excel le 1er champ soit a, lesecond b et le 3eme c et quensuite chaque valeur de la base sql se place dans le champ correspondant


pouvez vous SVP m'aider ?
~_enricall_~
brodseba
le 18/11/2006 à 07:31
brodseba
//Boucle sur les resultats
while($row = mysql_fetch_array($result)) {
$csv_output .= "$row[a],$row,$row[c]\\n";
}

Sinon, essaie de sauvegarder ton fichier en format .csv.

De plus, je crois qu'Excel utilise un autre séparateur que ',' par défaut. Si je ne me trombe pas, c'est t. Tu n'a rien à perdre.
brodseba
le 18/11/2006 à 07:36
brodseba
LePHPFacile semble enlever les caratères spéciaux... comme je n'arrive pas à modifier l'autre message, voici ma seconde tentative.

//Boucle sur les resultats
while($row = mysql_fetch_array($result)) {
$csv_output .= "$row[a],$row,$row[c]\n";
}

Sinon, essaie de sauvegarder ton fichier en format .csv.

De plus, je crois qu'Excel utilise un autre séparateur que ',' par défaut. Si je ne me trombe pas, c'est \t. Tu n'a rien à perdre.
LupusMic
le 20/11/2006 à 02:02
LupusMic
select into outfile.

Quelques remarques par rapports au script proposé :
- que ce passe-t-il lorsque l'ensemble des données dépassent les 3 Mo ?
- pourquoi associer un type de données invalides aux données renvoyées ?

Voici une ébauche que je peux te proposer :
<?php
define('SEP', ",") ;
define('MIME', "[lien=http://fr.selfhtml.org/divers/typesmime.htm]text/comma-separated-values[/lien]") ;
define('EXT', "csv") ;
// Ce sont bien sûr des anti-slashes dans la chaîne.
define('EOL', "/n" /* "/r/n" */) ;
define('FILENAME', "essai") ;


$query = "SELECT a,b,c FROM table_reporting order by id asc " ;
$result = mysql_query($query)
or die('Erreur SQL !' . $query . '' . mysql_error());

header("Content-type: ".MIME);
header("Content-disposition: attachment; filename=".FILENAME.".".EXT);

echo "a".SEP."b".SEP."c".SEP.EOL ;
while($row = mysql_fetch_array($result))
echo $row['a'].SEP.$row['b'].SEP.$row['c'].EOL ;
?>


Il est à noter qu'il faut aussi prendre en compte que les données peuvent contenir des virgules. Dans ces cas, on utilises classiquement un caractère comme les guillemets pour délimiter les chaînes de caractères.

Bref, le script est à affiner. À moins que tu n'utilises ce qui existe déjà dans MySQL ;)
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours