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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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";
		}