Pb export xls par php

Signaler
Messages postés
7
Date d'inscription
mercredi 16 septembre 2009
Statut
Membre
Dernière intervention
27 février 2010
-
Messages postés
7
Date d'inscription
mercredi 16 septembre 2009
Statut
Membre
Dernière intervention
27 février 2010
-
bonjour à tous,
merci de me lire.
j'exporte des données depuis une base mysql en passant par php et j'extrait un tableau xls.
J'utilise :
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=$nomFichier.xls");

puis
$csv_output="id\tRefClient\tbase\tNumeroDossier\n";
//La requete SQL
for($i=0;$i<= count($champ);$i++){
$sql="select * from dossiers where NumMED='".$champ[$i]."' ";
$res=mysql_query($sql) or print($sql);
$row=mysql_fetch_array($res);
$csv_output .= $row['id']."\t".$row['RefClient']."\t".$row['Base']."\t".$row['NumMED']."\n";
}
//affichage
print $csv_output;
mysql_close($link);
exit;

notez : $champ[$i] correspond aux variables récupérées par les checkboxes cochées par l'utilisateur qui a sélectionné les lignes du tableau qu'il veut exporter sous excel.

Bon, ça marche très bien, j'obtiens un tableau XLS... qui contient le même nombre de lignes qu'il y a d'enregistrements (ou de lignes sélectionnées) SAUF QUE certaines lignes sont "en blanc", c'est à dire sans valeurs dans les cellules.... et ce sont toujours les mêmes lignes... et quand je fais un export de la table en csv depuis phpmyadmin, ces lignes sont correctement exportées...
Le bug n'est pas aléatoire. Ce sont toujours les même lignes qui sont exportées 'à vide' dans excel.
Je ne vois absolument pas d'où vient le problème et mon client est pour l'instant magnanime mais quelque chose me dit que ça ne va pas durer longtemps...

Merci de votre aide.

4 réponses

Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
17
Salut,

Est-il possible de voir un peu à quoi ressemblent ces lignes vides ?
Plus précisément, contiennent-elels des caractères spéciaux et/ou particuliers ? (par particulier, j'entends... euh... qui pourraient faire planter la bazar...)

Au lieu d'envoyer l'entête XLS, peux-tu envoyer :
header('Content-type: text/plain');
pour afficher le fichier directement à l'écran (c'est du debug, hein) histoire de voir à quoi ressemble vraiment ces lignes vides ? Importées dans Excel, tu ne verras pas grand chose, parce qu'Excel va traiter les données sans t'informer de ce qu'il fait. Regarder le fichier en texte brut te permettra d'avoir une vue de ce qu'Excel prend en entrée avant de zapper certaines lignes.

J'ai pas la solution là tout de suite, il faut d'abord savoir à quoi ressemble le fichier envoyé avant de faire un diagnostique ;)

--
Neige

Souvent la réponse à votre question se trouve dans la doc. Commencez par là ;)
Messages postés
7
Date d'inscription
mercredi 16 septembre 2009
Statut
Membre
Dernière intervention
27 février 2010

Salut Neige et merci pour ta réponse;

J'ai suivi ton conseil et envoyé header('Content-type: text/plain');
Le résultat en texte est exactement le même qu'en export xls ou csv : certaines lignes existent mais elles sont totalement vides.
Je rappelle qu'en faisant l'export en csv à partir de l'interface phpmyadmin, les lignes existent et elles sont correctement remplies.
J'en déduirais que le problème ne vient pas du contenu de ma table mais de la façon dont je procède pour l'extraire...
et pourtant, si ça fonctionne très bien pour certaines lignes, pourquoi ça ne fonctionne pas pour d'autres ?
Bref je suis au point mort.
Si tu as d'autres pistes de recherches, merci d'avance.
Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
17
T'as pas répondu à l'autre question ;) : elles contiennent des caractères spéciaux ces lignes ? Tu dois pouvoir le voir avec phpMyAdmin...
Parce que là, dans l'immédiat, c'est la seule piste que j'aurais...

Sinon, je suppose que la requête s'exécute correctement... ? et que la variable $row est correctement remplie par mysql_fetch_array() ?

Est-ce que tu as essayé en spécifiant manuellement l'encodage des caractères utilisé pour la connexion ? Je suis pas au top niveau de ce côté là, y'a deux requêtes à exécuter pour lui dire le charset utilisé... Mais je sais plus bien quoi, et j'ai pas vraiment le temps de faire des recherches poussées (déjà j'ai pas vraiment le temps de répondre lol)

--
Neige

Souvent la réponse à votre question se trouve dans la doc. Commencez par là ;)
Messages postés
7
Date d'inscription
mercredi 16 septembre 2009
Statut
Membre
Dernière intervention
27 février 2010

Pour la question des caractères spéciaux, je n'ai pas répondu parce que la réponse est la suivante : il n'y en a ni plus ni moins et ils sont pas plus spéciaux (é,è,ô,etc) que dans les lignes qui s'affichent correctement dans xls.
J'ai vérifié, $row... et j'ai même encodé utf8_encode($row['nom'])... ensuite j'ai juste exporté la cellule des identifiants (valeur numérique)... toujours les mêmes lignes vides.
Donc je repose le problème :
Quand j'exporte en csv à partir de phpmyadmin tout vabien
Quand j'exporte en xls à partir de php, des lignes, et toujours les mêmes apparaissent vides
J'ai regardé la structure du csv exporté : rien d'anormal, les champs sont tous délimités par ;
Je précise que j'ai testé mes lignes de code d'export sur une autre table dans une autre base (qui comporte des caractères spéciaux) et là pas de problème.
Le bug pourrait-il venir de ce que la table contient un fichier extrait depuis access (le machin de microsoft) ?
Une journée passée à chercher et à pas trouver.......
Si par hasard, un bon pèlerin de passage par ici venait à me donner un indice de recherche, il m'éviterait de devenir
A vot' bon coeur...