export d'un csv via php, Calc réagit bien mais pas Excel
Bonjour,
Dans le cadre de mon travail, je développe une interface de requêtes pour les gestionnaires.
Quand elles cliquent sur une requête, je gère d'abord l'affichage HTML et ensuite, affecte à la propriété (string) csv de mon objet requête le contenu qui va bien, avec pour séparateur la virgule.
Ensuite quand elles cliquent sur le bouton export, cela déclenche le code qui suit.
Calc d'Open Office produit un tableau sans faille, Excel affiche les virgules et semble mal interpréter le séparateur...
Y aurait-il une solution pour que les gestionnaires, quel que soit leur outil de travail, puisse récupérer un fichier propre ?
Code:
1 2 3 4 5
| elseif(isset($_GET['export'])){
header("Content-Type: application/csv-tab-delimited-table");
header('Content-Disposition: attachement; filename="'.$_SESSION['titreReq'].'"');
echo $_SESSION['csv'];
} |
Et voici la boucle qui affecte ma propriété csv, bien que je ne pense pas qu'elle soit en cause, mais sait-on jamais...
Par exemple à la réflexion, je ne comprends pas pourquoi le premier champ apparaît TOUJOURS avec des guillemets dans le fichier .csv... Mystère pour moi, serait-ce ceci qui provoque le bug chez Microsoft ?
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
|
//affecte la propriété csv
$this->csv='';
//préparer la ligne des champs dans le csv
foreach ($champsBase as $nom => $index) {
$nomWeb=champWeb($nom);
if($nomWeb!=''){
$this->csv.='"'.$nomWeb.'",';
}
//penser au cas du nom de champ pas encore entré dans notre table champs
else{
$this->csv.='"Champ à saisir",';
}
}
$this->csv.=substr($this->csv,0,-1);
$this->csv.="\r\n";
$ligne='';
//boucle des data pour le csv
foreach($resultats as $num=>$enregistrement){
$ligne='';
foreach($enregistrement as $champ=>$valeur){
$ligne.=$valeur.',';
}
//supprimer la dernière virgule
$ligne=substr($ligne,0,-1);
//concaténer à csv en ajoutant le retour ligne
$this->csv.=$ligne."\r\n";
} |