Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > Bureautique
Bureautique Forum d'entraide sur la gestion dynamique de documents de bureautique (Word, Excel, OpenOffice...) avec PHP. Avant de poster -> Cours Excel, FAQ OpenXML, FAQ OpenDocument
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 30/07/2007, 11h20   #1
Membre du Club
 
Inscription : décembre 2006
Messages : 296
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 296
Points : 40
Points : 40
Par défaut Exporter un tableau PHP vers CSV ou XLS

bonjour,
j'ai un petit problème que je ne sais pas de tout comment s'est prendre avec.
dans mon projet de stage on me demande d'ajouter un bouton dans ma page PHP pour pouvoir exporter le tabeau afficher en forme exploitable par excel
je lance la requête je recupère mes données j'affiche bien mon tableau mais je ne sais pas comment faire pour l'exporter à partir de lapage php
je l'ai vu quelque part mais je ne sais pas faire
SVP aidez moi.
merci d'avance
mariafan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/07/2007, 11h52   #2
Rédacteur/Modérateur
 
Avatar de MaitrePylos
 
Homme Gérard Ernaelsten
DBA & Dev PHP
Inscription : juin 2005
Messages : 3 182
Détails du profil
Informations personnelles :
Nom : Homme Gérard Ernaelsten
Âge : 39
Localisation : Belgique

Informations professionnelles :
Activité : DBA & Dev PHP
Secteur : Service public

Informations forums :
Inscription : juin 2005
Messages : 3 182
Points : 6 469
Points : 6 469
Salut,

Je m'étais fais une petite classe pour cette question récurrente.

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
 
<?php
class FichierExcel {
 
private 
	$csv = Null;
	/**
	 * Cette ligne permet de créer les colonnes du fichers Excel
	 * Cette fonction est totalement faculative, on peut faire la même chose avec la
	 * fonction insertion, c'est juste une clarté pour moi
	 */
	function Colonne($file) {
 
		$this->csv.=$file."\n";
		return $this->csv;
 
	}
 
	/**
	 * Insertion des lignes dans le fichiers Excel, il faut introduire les données sous formes de chaines
	 * de caractère.
	 * Attention a séparer avec une virgule.
	 */
	function Insertion($file){
 
		$this->csv.=$file."\n";
		return $this->csv;
	}
 
	/**
	 * fonction de sortie du fichier avec un nom spécifique.
	 *
	 */
	function output($NomFichier){
 
		header("Content-type: application/vnd.ms-excel");
		header("Content-disposition: attachment; filename=$NomFichier.csv");
		print $this->csv;
		exit;
 
	}
}
 
?>
Puis tu l'instancies avec tes données.
Code :
1
2
3
4
5
 
$fichier = new FichierExcel();
$fichier->Colonne("Col1;Col2;Col3");
$fichier->Insertion("COUCOU;SALUT;BONJOUR");//ici on peut faire une boucle si nécessaire.
$fichier->output('NomFichier');

Perso, je sépare par des points-Virgule, reconnu tout de suite par Ooo.

Pour Excel , il faut sélectionner la colonne A, ensuite Données->convertir

Voila.
MaitrePylos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/07/2007, 13h35   #3
Membre du Club
 
Inscription : décembre 2006
Messages : 296
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 296
Points : 40
Points : 40
execusez moi est ce que vous pouvez me donner un exemple d'utilisation SVP
car je suis débutant et j ene comprend vraiment tout
merci de votre aide
mariafan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/07/2007, 13h52   #4
Rédacteur/Modérateur
 
Avatar de MaitrePylos
 
Homme Gérard Ernaelsten
DBA & Dev PHP
Inscription : juin 2005
Messages : 3 182
Détails du profil
Informations personnelles :
Nom : Homme Gérard Ernaelsten
Âge : 39
Localisation : Belgique

Informations professionnelles :
Activité : DBA & Dev PHP
Secteur : Service public

Informations forums :
Inscription : juin 2005
Messages : 3 182
Points : 6 469
Points : 6 469
Copiez le premier code dans un fichier et nommé le FichierExcel.php

Une fois ceci fait ouvrez un nouveau fichier test.php et taper le code suivant

Code :
1
2
3
4
5
6
7
8
9
 
<?php
 
include('FichierExcel.php');
 
$fichier = new FichierExcel();
$fichier->Colonne("Col1;Col2;Col3");
$fichier->Insertion("COUCOU;SALUT;BONJOUR");//ici on peut faire une boucle si nécessaire.
$fichier->output('NomFichier');
Appeler test.php et normalement un tableur devrais s'ouvrir
MaitrePylos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/07/2007, 14h51   #5
Membre du Club
 
Inscription : décembre 2006
Messages : 296
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 296
Points : 40
Points : 40
merci pour vos explications
mais j'ai eu l'erreur svt:
Code :
1
2
 
Parse error: parse error, expecting `T_OLD_FUNCTION' or `T_FUNCTION' or `T_VAR' or `'}'' in c:\program files\easyphp1-8\www\FichierExcel.php on line 4
et moi je cherche à avoir un tableau déja présent dans ma page web en forme exploitable par excel
je m'excuse si je suis lourd
mais je ne sais pas sincerment comment faire et je dois le faire aidez moi SVP
merci
mariafan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/07/2007, 15h05   #6
Rédacteur/Modérateur
 
Avatar de MaitrePylos
 
Homme Gérard Ernaelsten
DBA & Dev PHP
Inscription : juin 2005
Messages : 3 182
Détails du profil
Informations personnelles :
Nom : Homme Gérard Ernaelsten
Âge : 39
Localisation : Belgique

Informations professionnelles :
Activité : DBA & Dev PHP
Secteur : Service public

Informations forums :
Inscription : juin 2005
Messages : 3 182
Points : 6 469
Points : 6 469
Voir la ligne 4 du fichier

FichierExcel.php on line 4


Ton tableau est visible sur ta page web, certe, mais tu veux le modifier à la volée?

Où donner la possibilité de la modifier sur Excel et de se la garder sur son pc?
MaitrePylos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/07/2007, 16h00   #7
Membre actif
 
Avatar de bigltnt
 
Inscription : mars 2007
Messages : 221
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : mars 2007
Messages : 221
Points : 155
Points : 155
Bonjour ! J'ai testé chez moi, car je cherche à produire un fichier excel à partir d'une base de données.

J'ai cependant eu la meme erreur que mariafan, j'ai donc changé ca:
Code :
1
2
3
4
5
class FichierExcel {	
	private $csv = Null;
//par
class FichierExcel {	
	var $csv = Null;
J'ai cependant 2 problèmes:
- POurquoi est-ce que j'obtiens une page blanche sous IE 6.0, et qu'excel ne s'ouvre pas ?
- Pourquoi sous excel 97 (je n'ai pas les autres), toutes les colonnes d'une ligne se trouvent dans la premiere cellule de la ligne en question ?

Merci
bigltnt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/07/2007, 16h26   #8
Rédacteur/Modérateur
 
Avatar de MaitrePylos
 
Homme Gérard Ernaelsten
DBA & Dev PHP
Inscription : juin 2005
Messages : 3 182
Détails du profil
Informations personnelles :
Nom : Homme Gérard Ernaelsten
Âge : 39
Localisation : Belgique

Informations professionnelles :
Activité : DBA & Dev PHP
Secteur : Service public

Informations forums :
Inscription : juin 2005
Messages : 3 182
Points : 6 469
Points : 6 469
Citation:
Envoyé par bigltnt
J'ai cependant eu la meme erreur que mariafan, j'ai donc changé ca:
Code :
1
2
3
4
5
class FichierExcel {	
	private $csv = Null;
//par
class FichierExcel {	
	var $csv = Null;
J'oublie souvent que je suis en php5
Citation:
Envoyé par bigltnt
J'ai cependant 2 problèmes:
- POurquoi est-ce que j'obtiens une page blanche sous IE 6.0, et qu'excel ne s'ouvre pas ?
- Pourquoi sous excel 97 (je n'ai pas les autres), toutes les colonnes d'une ligne se trouvent dans la premiere cellule de la ligne en question ?

Merci
Pour Ie6 : je sais pas chez moi ça marche, voir peut être du côté de
Code :
header("Content-type: application/vnd.ms-excel");
Pour ce qui est de 1 colonne, c'est à cause de la séparation, j'utilise le pont virgule qui est automatiquement reconnu par OpenOffice.

Pour Excel il faut sélectionner la colone A->Données->convertir->choisir point-virgule
MaitrePylos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/07/2007, 17h14   #9
Membre actif
 
Avatar de Nicomart
 
Inscription : septembre 2005
Messages : 206
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations forums :
Inscription : septembre 2005
Messages : 206
Points : 176
Points : 176
Envoyer un message via Skype™ à Nicomart
Sinon, tu peux essayer la solution suivante :

dans ta page, tu mets un lien
Code :
<a href="dl.php">T&eacute;l&eacute;charger</a>
Dans le même répertoire, tu crées une page que tu appelles dl.php et qui contient le code suivant (et rien d'autre) :

Code :
1
2
3
4
5
6
7
8
9
10
<? 
header("Content-disposition: attachment; filename=monfichier.csv"); 
header("Content-Type: application/force-download"); 
header("Content-Transfer-Encoding: text/plain\n"); 
header("Content-Length: ".filesize('monfichier.csv')); 
header("Pragma: no-cache"); 
header("Cache-Control: must-revalidate, post-check=0, pre-check=0, public"); 
header("Expires: 0"); 
readfile('monfichier.csv');
?>
En remplaçant monfichier.csv par le nom de ton fichier, toujours dans le même répertoire. Cela suppose bien sûr que le fichier existe, mais ça tu peux le créer assez simplement. Je suppose que le tableau est créé à partir des champs d'une bd, donc avec les instructions fopen, fwrite, fclose, ça se fait...

hope it helps
Nicomart est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/08/2007, 08h38   #10
Membre chevronné
 
Avatar de Dia_FR
 
Homme Aurélien
Développeur Web
Inscription : avril 2006
Messages : 510
Détails du profil
Informations personnelles :
Nom : Homme Aurélien
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : avril 2006
Messages : 510
Points : 643
Points : 643
sinon y a tout simplement le package spreadsheet_excel_writer de PEAR qui fait ça très bien

et si tu veux pas t'embêter à installer PEAR, en standalone y a php_writeexcel qui est très bien
__________________
Dia [ Page DVP ] [ Blog ] [ Site pro ]
Dia_FR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/08/2007, 09h26   #11
Membre du Club
 
Inscription : décembre 2006
Messages : 296
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 296
Points : 40
Points : 40
oui mai s comment ça marche est ce que c'est un outils ou c quoi exactement
moi j'ai besoin d'automatisé cette tache i.e lorsque je suis dans une page avec un lien ou un bouton je génére le fichier exploitable par excel
merci de votre aide
mariafan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/08/2007, 10h04   #12
Membre chevronné
 
Avatar de Dia_FR
 
Homme Aurélien
Développeur Web
Inscription : avril 2006
Messages : 510
Détails du profil
Informations personnelles :
Nom : Homme Aurélien
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : avril 2006
Messages : 510
Points : 643
Points : 643
ben... c'est des librairies donc ça met à ta disposition des objets, des méthodes...

comment les utiliser ben suivant quelle librairie tu veux utiliser tu vas sur le site off et tu regardes la doc, comme tout le monde

et comment l'intégrer au site ben ton lien ou ton bouton tu les fais pointer vers une page php
et dans cette page, tu mets juste le code qui va te générer le fichier Excel (envoi de headers et écriture des données)
__________________
Dia [ Page DVP ] [ Blog ] [ Site pro ]
Dia_FR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/08/2007, 16h12   #13
Membre du Club
 
Inscription : décembre 2006
Messages : 296
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 296
Points : 40
Points : 40
Citation:
Envoyé par Nicomart
Sinon, tu peux essayer la solution suivante :

dans ta page, tu mets un lien
Code :
<a href="dl.php">T&eacute;l&eacute;charger</a>
Dans le même répertoire, tu crées une page que tu appelles dl.php et qui contient le code suivant (et rien d'autre) :

Code :
1
2
3
4
5
6
7
8
9
10
<? 
header("Content-disposition: attachment; filename=monfichier.csv"); 
header("Content-Type: application/force-download"); 
header("Content-Transfer-Encoding: text/plain\n"); 
header("Content-Length: ".filesize('monfichier.csv')); 
header("Pragma: no-cache"); 
header("Cache-Control: must-revalidate, post-check=0, pre-check=0, public"); 
header("Expires: 0"); 
readfile('monfichier.csv');
?>
En remplaçant monfichier.csv par le nom de ton fichier, toujours dans le même répertoire. Cela suppose bien sûr que le fichier existe, mais ça tu peux le créer assez simplement. Je suppose que le tableau est créé à partir des champs d'une bd, donc avec les instructions fopen, fwrite, fclose, ça se fait...

hope it helps
est ce que je peux avoir plus d'explication concernant les si je dois les ajouter dans mon code distes moi svp ou exactement et commen tles utilisé SVP
Merci d'avance (je ne sais pas trop comment les utilisé car je suis débuttant en php)

merci
mariafan est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/08/2007, 16h40   #14
Membre chevronné
 
Avatar de Dia_FR
 
Homme Aurélien
Développeur Web
Inscription : avril 2006
Messages : 510
Détails du profil
Informations personnelles :
Nom : Homme Aurélien
Localisation : France

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : avril 2006
Messages : 510
Points : 643
Points : 643
tjrs chercher avant de demander

fopen
fwrite
fclose
__________________
Dia [ Page DVP ] [ Blog ] [ Site pro ]
Dia_FR est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/08/2007, 19h48   #15
Membre actif
 
Avatar de Nicomart
 
Inscription : septembre 2005
Messages : 206
Détails du profil
Informations personnelles :
Âge : 27
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations forums :
Inscription : septembre 2005
Messages : 206
Points : 176
Points : 176
Envoyer un message via Skype™ à Nicomart
le fopen va te permettre d'ouvrir ton fichier, éventuellement de le créer avec plus ou moins d'options (cf. la doc de Dia_fr). Tu l'utilises au début de ton script.

Ensuite, pour chaque champ que tu veux entrer dans ton fichier, tu fais un fwrite avec ce champ en paramètre, suivi du caractère de fin de ligne (\n).

Tu finis par fermer ton fichier en le sauvegardant avec fclose.

Ce sont les trois opérateurs basiques de gestion de fichier en php.
Nicomart est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/02/2009, 22h47   #16
Invité de passage
 
Inscription : juin 2008
Messages : 4
Détails du profil
Informations forums :
Inscription : juin 2008
Messages : 4
Points : 3
Points : 3
Par défaut pb avec php 4.4.9

Bonjour,
je viens relancer la discussion

j'ai utilisé ce script génial ,
en local avec wampserver ( php 5.25) çà marche nickel

chez mon hébergeur (1&1 php 4.4.9) pas moyen ,
après avoir corrigé la déclaration de variable dans la class, comme indiqué
je me retrouve avec le contenu du fichier csv généré qui s'affiche dans la fenêtre qui lance le script.

quelqu'un a-t-il une idée ?

merci

Ulysse
Ulysse37 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/02/2009, 07h42   #17
Rédacteur/Modérateur
 
Avatar de MaitrePylos
 
Homme Gérard Ernaelsten
DBA & Dev PHP
Inscription : juin 2005
Messages : 3 182
Détails du profil
Informations personnelles :
Nom : Homme Gérard Ernaelsten
Âge : 39
Localisation : Belgique

Informations professionnelles :
Activité : DBA & Dev PHP
Secteur : Service public

Informations forums :
Inscription : juin 2005
Messages : 3 182
Points : 6 469
Points : 6 469
on peut voir le code ?
MaitrePylos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/10/2011, 10h52   #18
Membre à l'essai
 
Alexis
Inscription : novembre 2010
Messages : 15
Détails du profil
Informations personnelles :
Nom : Alexis
Âge : 23

Informations forums :
Inscription : novembre 2010
Messages : 15
Points : 20
Points : 20
Bonjour, je vais dépoussiérer ce sujet mais juste pour dire que ta classe est très bien pensé, et qu'elle fonctionne parfaitement.
Pour ma part ça donne ça en réadaptant :
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
<?php
/**
 * Génère fichier excel
 *
 */
 
class SC_Excel
{
 
	private $csv = array();
 
	/**
	 * Permet d'insérer une colone (même chose qu'une ligne, mais fort pratique pour le compréhension)
	 *
	 * @param string $file
	 * @return array
	 */
	function colonne($file)
	{
		$this->csv[] = $file;
		return $this->csv;
	}
 
	/**
	 * Permet d'insérer des lignes.
	 *
	 * @param string $file
	 * @return array 
	 */
	function insertion($file)
	{
		$this->csv[] = $file;
		return $this->csv;
	}
 
	/**
	 * Permet la création du fichier
	 *
	 * @param string $NomFichier Correspond au nom du fichier
	 */
	function output($NomFichier)
	{
		header("Content-type: application/vnd.ms-excel");
		header("Content-Disposition: attachment;filename=$name");
		header("Content-Transfer-Encoding: binary");
		header('Pragma: no-cache');
		header('Expires: 0');
		header("Content-disposition: attachment; filename=$NomFichier.csv");
		$content = mb_convert_encoding(implode("\n", $this->csv), "Windows-1252", "UTF-8");
		echo $content;
		exit;
	}
}
 
?>
Ghostaunt est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/10/2011, 11h08   #19
Modérateur
 
Inscription : septembre 2010
Messages : 7 271
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 271
Points : 8 663
Points : 8 663
pas de implode pour du CSV mais fputcsv

EDIT : pas aussi confondre CSV et XSL, dans Excel on ouvre pas un CSV mais on importe un CSV
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/10/2011, 11h47   #20
Membre à l'essai
 
Alexis
Inscription : novembre 2010
Messages : 15
Détails du profil
Informations personnelles :
Nom : Alexis
Âge : 23

Informations forums :
Inscription : novembre 2010
Messages : 15
Points : 20
Points : 20
Salut j'ai du mal à saisir ta remarque, je n'écris pas directement dans un fichier là ?
Ghostaunt est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h45.


 
 
 
 
Partenaires

Hébergement Web