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 27/09/2011, 16h47   #1
Candidat au titre de Membre du Club
 
Inscription : mai 2006
Messages : 68
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 68
Points : 13
Points : 13
Par défaut Export Excel dans un template

Bonjour,

J'ai un problème que je n'arrive pas à solutionner.
En fait, j'aimerais pouvoir exporter un tableau de données de mon application et l'insérer dans un template Excel qui se trouve sur le serveur, pour que l'utilisateur qui a demandé l'export, puisse le sauvegarder.

J'ai besoin des templates, ils sont composés d'une partie "table de donnée" (que j'aimerais remplir) et d'un graphique (qui se construra en fonction des dites données).

J'ai réussi à faire un nouveau fichier Excel vide et à remplir les 2 première colonnes comme ci-dessous, mais impossible de loader un template et le remplir.

Avec cet exemple:
- Un nouveau fichier Excel est créé
- La colonne A est remplie avec le champ NAME
- La colonne B est remplie avec le champ VALUE
- Et le fichier est proposé au téléchargement à l'utilisateur.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
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=template1.xls");
//la dernière lignes header ne devrait pas créer un nouveau template.xls, mais ouvrir l'existant...
 
$i = 0;
while($data[$i]['name'] <> null){    		    		
  echo $data[$i]['name']."\t".$data[$i]['value']."\r\n";
  $i++;
}
Ma question est:
Comment modifier ou remplacer les 4 lignes HEADER pour ouvrir un fichier Excel existant et y appliquer la même insertion de données?

Est-ce que quelqu'un à une idée pour me faire avancer?
Merci d'avance pour vos suggestions.
Seurjer
seurjer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2011, 17h15   #2
Rédacteur/Modérateur
 
Avatar de Thes32
 
Homme
Développeur Web
Inscription : décembre 2006
Messages : 2 335
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : décembre 2006
Messages : 2 335
Points : 3 774
Points : 3 774
Bonjour,

Tu as deux possiblités pour cela :

- soit tu génères un fchier csv (pris en charge par Excel)
- soit tu génères des fichiers xls, xlsx (voir l'article Introduction à PHPExcel)
__________________
Développeur | Zend Certified Engineer

Étapes Pour mieux se servir du forum:
1. Commencez par lire les cours et tutoriels ;
2. Faites une recherche;
3. Faites un post si rien trouvé dans les deux étapes précédentes en respectant les règles;

Nix>_Rien n'est plus pratique que la théorie
Thes32 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2011, 17h25   #3
Candidat au titre de Membre du Club
 
Inscription : mai 2006
Messages : 68
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 68
Points : 13
Points : 13
Hello,

Merci pour tes suggestions, mais:

1. Comment je pourrais merger un fichier csv contenant mon tableau de données et mon template qui contient mon graph vide?

2. Dans la deuxième proposition, tu parles de PHPExcel (une librairie de plus!)
Est-ce qu'il n'y a pas une solution dans l'esprit ci-dessous?

PS: je me retrouve avec une page blanche et rien ne se passe dans mon fichier template2.xls...
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
$FILENAME="./excel_templates/template2.xls"; 
$excel=new COM("Excel.application"); 
$excel->Workbooks->Open($FILENAME);
$excel->Visible=1; 
$book=$excel->Workbooks(1); 
$sheet=$book->Worksheets(1);
 
$i = 0;
while($data[$i]['name'] <> null){    		    		
 
	$selcell = $sheet->cells($i,1); 
	$selcell->activate; 
	$selcell->value=$data[$i]['name']; 
	$i++;
}
$book->Save(); 
unset($sheet); 
unset($book); 
$excel->Workbooks->Close(); 
$excel->Quit(); 
unset($excel);
Merci,
Seurjer
seurjer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2011, 17h36   #4
Rédacteur/Modérateur
 
Avatar de Thes32
 
Homme
Développeur Web
Inscription : décembre 2006
Messages : 2 335
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : décembre 2006
Messages : 2 335
Points : 3 774
Points : 3 774
ok, tu n'avais pas dit que tu utiliser la classe COM. Mais c'est quoi le while qui vient juste après ?
__________________
Développeur | Zend Certified Engineer

Étapes Pour mieux se servir du forum:
1. Commencez par lire les cours et tutoriels ;
2. Faites une recherche;
3. Faites un post si rien trouvé dans les deux étapes précédentes en respectant les règles;

Nix>_Rien n'est plus pratique que la théorie
Thes32 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2011, 17h39   #5
Candidat au titre de Membre du Club
 
Inscription : mai 2006
Messages : 68
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 68
Points : 13
Points : 13
C'est pour parcourir mon tableau $data et insérer ligne par ligne les données dans ma feuille Excel.

C'est pas correct?
seurjer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/09/2011, 18h10   #6
Rédacteur/Modérateur
 
Avatar de Thes32
 
Homme
Développeur Web
Inscription : décembre 2006
Messages : 2 335
Détails du profil
Informations personnelles :
Sexe : Homme

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : décembre 2006
Messages : 2 335
Points : 3 774
Points : 3 774
Citation:
Envoyé par seurjer Voir le message
C'est pour parcourir mon tableau $data et insérer ligne par ligne les données dans ma feuille Excel.

C'est pas correct?
Tu parles de ceci ? c'est pas correct en effet...

Code :
1
2
3
4
5
6
 
$i = 0;
while($data[$i]['name'] <> null){    		    		
  echo $data[$i]['name']."\t".$data[$i]['value']."\r\n";
  $i++;
}
__________________
Développeur | Zend Certified Engineer

Étapes Pour mieux se servir du forum:
1. Commencez par lire les cours et tutoriels ;
2. Faites une recherche;
3. Faites un post si rien trouvé dans les deux étapes précédentes en respectant les règles;

Nix>_Rien n'est plus pratique que la théorie
Thes32 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/10/2011, 10h09   #7
Candidat au titre de Membre du Club
 
Inscription : mai 2006
Messages : 68
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 68
Points : 13
Points : 13
Bonjour,

Oui en effet le while n'est pas correct:
Code :
1
2
3
4
5
6
 
$i = 0;
while($data[$i]['name'] <> null){    		    		
  echo $data[$i]['name']."\t".$data[$i]['value']."\r\n";
  $i++;
}
Depuis, je l'ai modifié dans ce sens:
Code :
1
2
3
4
5
6
7
8
9
 
$i = 0;
while($data[$i]['name'] <> null){    		    		
 
	$selcell = $sheet->cells($i,1); 
	$selcell->activate; 
	$selcell->value=$data[$i]['name']; 
	$i++;
}
Mais mon problème initial: récupérer mon template et écrire dedans ne fonctionne toujours pas, même si au lieu du while j'essai d'écrire "tutu"

Est-ce que cela fonctionne de votre côté?
Code :
1
2
3
4
5
6
7
 
$FILENAME="./excel_templates/template2.xls"; 
$excel=new COM("Excel.application"); 
$excel->Workbooks->Open($FILENAME);
$excel->Visible=1; 
$book=$excel->Workbooks(1); 
$sheet=$book->Worksheets(1);
seurjer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/10/2011, 11h16   #8
Candidat au titre de Membre du Club
 
Inscription : mai 2006
Messages : 68
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 68
Points : 13
Points : 13
Re,

J'ai identifié la ligne qui pose problème:

Code :
1
2
3
4
print "debug 1";
$excel=new COM("Excel.application"); 
print "debug 2";
L'instanciation de mon objet COM plante.
debug 2 n'apparaît jamais...

Je n'y comprend rien. Ce n'est pourtant pas sorcier.
Please help.
seurjer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/10/2011, 15h31   #9
Candidat au titre de Membre du Club
 
Inscription : mai 2006
Messages : 68
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 68
Points : 13
Points : 13
Bon, ben finalement j'ai laissé tombé l'objet COM pour PHPExcel!

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
include './lib/PHPExcel.php';
$objet = new PHPExcel_Reader_Excel5();
$excel = $objet->load('template23.xls');
$sheet = $excel->getSheet(0);
 
$i = 0;
foreach ($data as $value){    		    		
 
	$sheet->setCellValueByColumnAndRow(0, $i+2, $value['name']);
	$sheet->setCellValueByColumnAndRow(1, $i+2, $value['value']);
	$i++;
}
 
$writer = new PHPExcel_Writer_Excel5($excel);
$writer->save('autreFichier.xls');
Je récupère bien mon fichier template pré-rempli et je créer "autreFichier.xls" complètement rempli.

C'est ce que je voulais.

Mais je tombe sur un autre problème, c'est que mon template contient un graphique vide... et celui-ci disparaît après le chargement des données.
Je vais créer un nouveau poste pour ça.

Merci Thes32 pour les pistes.
seurjer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/10/2011, 08h33   #10
Membre du Club
 
Inscription : avril 2009
Messages : 72
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 72
Points : 56
Points : 56
Citation:
Envoyé par seurjer Voir le message

Mais je tombe sur un autre problème, c'est que mon template contient un graphique vide... et celui-ci disparaît après le chargement des données.
Je vais créer un nouveau poste pour ça.
Salut, tu as trouvé la solution pour ton graphique qui disparaît ? J'ai un problème comparable ...
cfried est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/10/2011, 07h39   #11
Candidat au titre de Membre du Club
 
Inscription : mai 2006
Messages : 68
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 68
Points : 13
Points : 13
Non, malheureusement...
seurjer 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 22h58.


 
 
 
 
Partenaires

Hébergement Web