Précédent   Forum des professionnels en informatique > PHP > Langage > Fichiers
Fichiers Forum d'entraide sur les fichiers avec PHP. Avant de poster -> FAQ fichiers et Sources fichiers
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 24/04/2007, 14h23   #1
Membre confirmé
 
Inscription : mai 2006
Messages : 372
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : mai 2006
Messages : 372
Points : 234
Points : 234
Par défaut Exporter Résultat requete vers Excel

Bonjour tout le monde!
Voila j'essai depuis ce matin d'exporter le resultat d"une requete vers un fichier excel. J'ai essayé avec les header, avec com avec writeexcel mais sans succes. Le moyen le plus simple me parait être avec header mais au lieu de m'ouvrir un fichier excel il m'affiche directement le resultat dans une page internet explorer. J'ai pris un code que j'ai trouvé sur un autre topic :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php 
header("Content-type: application/vnd.ms-excel"); 
header("Content-Disposition: inline; filename=yourfilename.xls"); header("Pragma: no-cache"); 
header("Expires: 0");  
 
$name="pippo"; 
$email="aaaaa@blue.ch";   
$age="44"; 
$data = '<table>';
$data .= '<tr style="background:black; color:white; font-weight:bold">';
$data .= '<td>Name</td><td>Email</td><td>Age</td><td>Location</td></tr>';
$data .= '<tr><td>'. $name . '</td><td>' . $email . '</td><td>' . $age . '</td><td>' . $location . '</td></tr>';
$data .= '</table>';
 
echo $data;
 
?>
Quelqu'un peut me dire ce qu'il manque pour afficher les info dans un document excel plutot qu'internet explorer? merci à vous
kahya est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/04/2007, 15h00   #2
Membre expérimenté
 
Avatar de mathieugamin
 
Inscription : octobre 2006
Messages : 572
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : octobre 2006
Messages : 572
Points : 562
Points : 562
Salut,
Tu veux que ton fichier soit directement ouvert par excel (excel s'ouvre automatiquement et affiche le résultat) ou tu veux écrire un fichier que tu puisses ouvrir ensuite avec Excel?
__________________
GAMIN !!!!
_______________________________________________
PHP 5.2 | Apache 2 | MySQL 5 | WinXP Pro | Mac OSX
mathieugamin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/04/2007, 15h06   #3
Membre confirmé
 
Inscription : mai 2006
Messages : 372
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : mai 2006
Messages : 372
Points : 234
Points : 234
j'aimerai qu'il s'ouvre directement, ça serai l'idéal mais bon au pire je me contenterai de créer un fichier
kahya est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/04/2007, 15h15   #4
Membre expérimenté
 
Avatar de mathieugamin
 
Inscription : octobre 2006
Messages : 572
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : octobre 2006
Messages : 572
Points : 562
Points : 562
Pour créer un fichier, voici le code :
Code :
1
2
3
4
5
6
7
$sql = mysql_query("SELECT * FROM table ORDER BY id ASC");
	$f = fopen('fichier.csv', 'a');
		while($res = mysql_fetch_object($sql)){
		fwrite($f, $res->truc.";".date('d/m/Y', $res->date).";".$res->autretruc.";\n");
	}
	fclose($f);
	echo 'L\'écriture est terminée !<br>';
Teste-le et dis-moi si c'est ce que tu attendais...

A+
__________________
GAMIN !!!!
_______________________________________________
PHP 5.2 | Apache 2 | MySQL 5 | WinXP Pro | Mac OSX
mathieugamin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/04/2007, 15h22   #5
Membre confirmé
 
Inscription : mai 2006
Messages : 372
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : mai 2006
Messages : 372
Points : 234
Points : 234
pas exactement, en fait là ça me met tout dans la même cellule, il faudrai que chaque champs soit dans une colonne
kahya est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/04/2007, 15h30   #6
Membre expérimenté
 
Avatar de mathieugamin
 
Inscription : octobre 2006
Messages : 572
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : octobre 2006
Messages : 572
Points : 562
Points : 562
Vérifie ton code car chez moi tout fonctionne...
Chacun des champs est séparé par un point-virgule, interprété par Excel comme une nouvelle colonne.
Tu as bien laissé les point-virgules dans fwrite() ?
__________________
GAMIN !!!!
_______________________________________________
PHP 5.2 | Apache 2 | MySQL 5 | WinXP Pro | Mac OSX
mathieugamin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/04/2007, 15h32   #7
Membre confirmé
 
Inscription : mai 2006
Messages : 372
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : mai 2006
Messages : 372
Points : 234
Points : 234
Code :
1
2
3
4
5
6
7
8
9
10
11
12
<?php
include("co.php");
$connect=mysql_connect($host, $user , $pwd) OR DIE("Connexion impossible au serveur de données");
mysql_select_db($bdd) or die( "Connexion impossible à la base de donnée");
$sql = mysql_query("SELECT nomintervenant, numintervenant FROM intervenant");
	$f = fopen('export.xls', 'a');
		while($res = mysql_fetch_object($sql)){
		fwrite($f, $res->numintervenant.";".$res->nomintervenant."\n");
	}
	fclose($f);
	echo 'L\'écriture est terminée !<br>';
?>
Voila mon code
kahya est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/04/2007, 15h34   #8
Membre confirmé
 
Inscription : mai 2006
Messages : 372
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : mai 2006
Messages : 372
Points : 234
Points : 234
Peronne n'a d'explication pour la technique avec les headers?
kahya est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/04/2007, 15h47   #9
Membre expérimenté
 
Avatar de mathieugamin
 
Inscription : octobre 2006
Messages : 572
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : octobre 2006
Messages : 572
Points : 562
Points : 562
Il te manque un point-virgule avant ton changement de ligne:
Citation:
.$res->nomintervenant.";\n")
Ca doit fonctionner maintenant.

Pour les headers, désolé, c'est pas encore mon point fort !
__________________
GAMIN !!!!
_______________________________________________
PHP 5.2 | Apache 2 | MySQL 5 | WinXP Pro | Mac OSX
mathieugamin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/04/2007, 15h48   #10
Expert Confirmé
 
Avatar de sekaijin
 
Femme
Urbaniste
Inscription : juillet 2004
Messages : 1 426
Détails du profil
Informations personnelles :
Sexe : Femme
Âge : 48
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Urbaniste
Secteur : Santé

Informations forums :
Inscription : juillet 2004
Messages : 1 426
Points : 2 813
Points : 2 813
Code :
1
2
3
         header('Content-Type: '.$mimetype.'; name="'.$file.'"');
         header('Content-Transfer-Encoding: binary');
         header('Content-Disposition: attachment; filename="'.$file.'"');
j'utilise ça pour toute mes extraction quelque soit le type de fichier

pour excel j'envoie au client des fichier xmlxls dont le mime/type est simplement $mimetype = 'text/xml'; et
$file = 'monfichier.xls'; ou
$file = 'monfichier.xmlxls';

il suffit donc de mettre le bon mime/type mais il ne faut pas confondre ce que tu réponds et ce qu'en fait le client

ce n'est pas toi développeur qui défini comment est interprété la réponse.
quoi qu'il arrive quelque soit le header c'est le client qui décide

certains clients privilégient le mime/type à l'extension du fichier d'autres (IE) c'est le contraire mais ni l'extension ni le mime/type te disent comment le client traite la chose.

il peut l'ouvrir directement si le navigateur est compatible, l'ouvrir avec un plugin, l'ouvrir avec l'application correspondante, proposer l'ouverture ou l'enregistrement, l'enregistrer. ce n'est pas toi qui peux décider ce qui sera fait mais c'est la conf client.

il est tentant de mettre dans le header un mime/type inconnu genre force/download mais dans ce cas là non plus le téléchargement n'est pas garanti. de plus le poste client risque de perdre le type du fichier et ne pas le comprendre.

enfin le nom du fichier transmis par le header est une proposition le client n'est pas tenu de s'en servir.

A+JYT
sekaijin est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/04/2007, 15h55   #11
Membre confirmé
 
Inscription : mai 2006
Messages : 372
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : mai 2006
Messages : 372
Points : 234
Points : 234
Code :
1
2
3
4
5
6
7
8
9
10
include("co.php");
$connect=mysql_connect($host, $user , $pwd) OR DIE("Connexion impossible au serveur de données");
mysql_select_db($bdd) or die( "Connexion impossible à la base de donnée");
$sql = mysql_query("SELECT nomintervenant, numintervenant FROM intervenant");
	$f = fopen('export.xls', 'a');
		while($res = mysql_fetch_object($sql)){
		fwrite($f, $res->numintervenant.";".$res->nomintervenant.";\n");
	}
	fclose($f);
	echo 'L\'écriture est terminée !<br>';
J'ai rajouté la virgule mais toujours le meme probleme!
kahya est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/04/2007, 16h17   #12
Membre expérimenté
 
Avatar de mathieugamin
 
Inscription : octobre 2006
Messages : 572
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : octobre 2006
Messages : 572
Points : 562
Points : 562
Ton problème se situe dans l'extension du fichier :
Code :
$f = fopen('export.xls', 'a')
C'est un fichier .csv qui prend en compte ces délimitateurs.

Le format .xls est spécifique et ne fonctionnera pas avec le code que je t'ai donné (je crois que ce n'est pas compatible).

Essaie de modifier le nom avec .csv comme extension et tout ira bien...
__________________
GAMIN !!!!
_______________________________________________
PHP 5.2 | Apache 2 | MySQL 5 | WinXP Pro | Mac OSX
mathieugamin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/04/2007, 16h45   #13
Membre confirmé
 
Inscription : mai 2006
Messages : 372
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : mai 2006
Messages : 372
Points : 234
Points : 234
super merci bcp ^^ et pour l'ouvrir en suivant tu as une idée?
kahya est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/04/2007, 16h56   #14
Membre expérimenté
 
Avatar de mathieugamin
 
Inscription : octobre 2006
Messages : 572
Détails du profil
Informations personnelles :
Âge : 32

Informations forums :
Inscription : octobre 2006
Messages : 572
Points : 562
Points : 562
Désolé, aucune !
Je te l'aurais donnée de suite sinon...
Si tu trouves, ça m'intéresse aussi !
__________________
GAMIN !!!!
_______________________________________________
PHP 5.2 | Apache 2 | MySQL 5 | WinXP Pro | Mac OSX
mathieugamin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/05/2007, 22h38   #15
Nouveau Membre du Club
 
Inscription : mai 2005
Messages : 40
Détails du profil
Informations personnelles :
Âge : 32
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2005
Messages : 40
Points : 36
Points : 36
Par défaut export excel

J'ai un bout de code que j'utilise pour créer des fichiers excel qui s'ouvrent dans IE. Par contre, je crée ce fichier xls dans un répertoire temporaire avant de l'ouvrir dans IE, mais ce n'est peut être pas nécessaire.

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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
 
$date = date("YmdHis", mktime());
$filename = "../_commun/temp/" . $logon_user . "_" . $date;
$sheetname = $logon_user . "_" . $date;
$fp = fopen($filename . ".xls", "a");
 
//--- un peu de xml pour la mise en page (orientation, figer les volets)
fwrite($fp, "
<html xmlns:o=\"urn:schemas-microsoft-com:office:office\"
xmlns:x=\"urn:schemas-microsoft-com:office:excel\"
xmlns=\"http://www.w3.org/TR/REC-html40\">
<head>
<meta http-equiv=Content-Type content=\"text/html; charset=windows-1252\">
<meta name=ProgId content=Excel.Sheet>
<meta name=Generator content='" . $app_name . "'>
<style>
<!--table
	{mso-displayed-decimal-separator:\"\,\";
	mso-displayed-thousand-separator:\" \";}
@page
	{margin:.39in .39in .39in .39in;
	mso-header-margin:.39in;
	mso-footer-margin:.39in;
	mso-page-orientation:landscape;}
-->
</style>
<!--[if gte mso 9]><xml>
 <x:ExcelWorkbook>
  <x:ExcelWorksheets>
   <x:ExcelWorksheet>
    <x:Name>" . $sheetname . "</x:Name>
    <x:WorksheetOptions>
     <x:DefaultColWidth>10</x:DefaultColWidth>
     <x:Print>
      <x:ValidPrinterInfo/>
      <x:PaperSizeIndex>9</x:PaperSizeIndex>
      <x:HorizontalResolution>600</x:HorizontalResolution>
      <x:VerticalResolution>600</x:VerticalResolution>
     </x:Print>
     <x:Selected/>
     <x:DoNotDisplayGridlines/>
     <x:FreezePanes/>
     <x:FrozenNoSplit/>
     <x:SplitHorizontal>1</x:SplitHorizontal>
     <x:TopRowBottomPane>1</x:TopRowBottomPane>
     <x:SplitVertical>1</x:SplitVertical>
     <x:LeftColumnRightPane>1</x:LeftColumnRightPane>
     <x:ActivePane>0</x:ActivePane>
     <x:ProtectContents>False</x:ProtectContents>
     <x:ProtectObjects>False</x:ProtectObjects>
     <x:ProtectScenarios>False</x:ProtectScenarios>
    </x:WorksheetOptions>
   </x:ExcelWorksheet>
  </x:ExcelWorksheets>
  <x:WindowHeight>9780</x:WindowHeight>
  <x:WindowWidth>15240</x:WindowWidth>
  <x:WindowTopX>0</x:WindowTopX>
  <x:WindowTopY>1230</x:WindowTopY>
  <x:ProtectStructure>False</x:ProtectStructure>
  <x:ProtectWindows>False</x:ProtectWindows>
 </x:ExcelWorkbook>
</xml><![endif]-->
</head>
<body link=blue vlink=purple>
   ");
puis un tableau <table>.....</table>
et enfin
Code :
1
2
3
4
echo "<script>$n";
echo "  window.open('http:" . $filename . ".xls','','left=0,top=0,width=screen.width,height=screen.height,resizable,scrollbars=1,menubar=1,toolbar=1,location=0,status=0');$n";
echo "  history.back();$n";
echo "</script>$n";
deruyter est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h59.


 
 
 
 
Partenaires

Hébergement Web