IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques et frameworks PHP Discussion :

[Excel] Export Excel dans un template


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 68
    Points : 40
    Points
    40
    Par défaut [Excel] 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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  2. #2
    Expert confirmé
    Avatar de Thes32
    Homme Profil pro
    Développeur PHP, .Net, T-SQL
    Inscrit en
    Décembre 2006
    Messages
    2 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur PHP, .Net, T-SQL

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 379
    Points : 4 853
    Points
    4 853
    Par défaut
    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

  3. #3
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 68
    Points : 40
    Points
    40
    Par défaut
    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 : 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
     
    $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

  4. #4
    Expert confirmé
    Avatar de Thes32
    Homme Profil pro
    Développeur PHP, .Net, T-SQL
    Inscrit en
    Décembre 2006
    Messages
    2 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur PHP, .Net, T-SQL

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 379
    Points : 4 853
    Points
    4 853
    Par défaut
    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

  5. #5
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 68
    Points : 40
    Points
    40
    Par défaut
    C'est pour parcourir mon tableau $data et insérer ligne par ligne les données dans ma feuille Excel.

    C'est pas correct?

  6. #6
    Expert confirmé
    Avatar de Thes32
    Homme Profil pro
    Développeur PHP, .Net, T-SQL
    Inscrit en
    Décembre 2006
    Messages
    2 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur PHP, .Net, T-SQL

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 379
    Points : 4 853
    Points
    4 853
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  7. #7
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 68
    Points : 40
    Points
    40
    Par défaut
    Bonjour,

    Oui en effet le while n'est pas correct:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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);

  8. #8
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 68
    Points : 40
    Points
    40
    Par défaut
    Re,

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

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

  9. #9
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 68
    Points : 40
    Points
    40
    Par défaut
    Bon, ben finalement j'ai laissé tombé l'objet COM pour PHPExcel!

    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
     
    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.

  10. #10
    Membre régulier
    Homme Profil pro
    Apprenti Informatique
    Inscrit en
    Avril 2009
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti Informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2009
    Messages : 83
    Points : 91
    Points
    91
    Par défaut
    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 ...

  11. #11
    Membre du Club
    Inscrit en
    Mai 2006
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 68
    Points : 40
    Points
    40
    Par défaut
    Non, malheureusement...

  12. #12
    Membre du Club
    Femme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Juin 2014
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2014
    Messages : 51
    Points : 40
    Points
    40
    Par défaut
    est ce vous avez trouvez une solution pour le graphique dans le nouveau fichier généré ? j'ai un problème comparable

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AIX] Exporter résultats dans excel
    Par Crevette130983 dans le forum AIX
    Réponses: 4
    Dernier message: 10/04/2009, 16h50
  2. Nommer la feuille du classeur Excel dans lequel on exporte une requête
    Par Thierry'' dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 20/09/2006, 08h41
  3. Réponses: 4
    Dernier message: 30/08/2006, 20h33
  4. Exporter résultats dans fichier excel [forms 6i]
    Par OUALASS dans le forum Forms
    Réponses: 4
    Dernier message: 30/05/2006, 19h38
  5. Exporter données dans un fichier excel
    Par Kasanova75 dans le forum Oracle
    Réponses: 3
    Dernier message: 08/03/2006, 10h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo