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 :

[PHPExcel] Génération de Fichiers Excel [Tutoriel]


Sujet :

Bibliothèques et frameworks PHP

  1. #21
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 67
    Par défaut
    j'ai suivi le tutoriel mais cette fois ci ça m'ouvre une page avec des caractères bizarre est ce que c'est un problème d'encodage ? et si c le cas quel bout de code devrais écrire pour transformer cela ?
    j'ai ce genre de texte :


    ��ࡱ�����������������;���� ��������������� ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������� ���� ������B���=�������%r8������X"����1������ ��������C�a�l�i�b�r�i���������� ��������������������� ��������������������� ��������������������� ��������������������� ��������������������� ��������������������� ��������������������� ��������������������� ��������������������� ��������������������� ��������������������� ��������������������� ��������������������� ��������������������� �������������������� ����������������������8����������������������������������������������������������������������3f���������f�f������f��������������������������������������������������������������̙���̙�3f��3����������������f��ff�������3f�3�f��3��33���3���3f�33��333���������U�S�E�R�S������g�����������������1�������D�a�t�e��A�l�b�u�m��T�i�t�r�e��R�e�f�e�r�e�n�c�e� �c�o�m�m�e�r�c�i�a�l�e� �C�o�m�p�o�s�i�t�e�u�r��L�a�b�e�l��S�o�c�i�e�t�e� �d� �e�d�i�t�e�u�r��S�o�c�i�e�t�e� �d�e� �d�r�o�i�t� �P�a�y�s� �d�e� �v�e�n�t�e� �P�a�y�s� �d�e� �d�e�p�o�t��P�r�i�x��Q�u�a�n�t�i�t�e� �J�u�l�y�,� �2�0�0�9� �t�i�t�r�e� �p�a�r�e�n�t��e�n�f�a�n�t�1�� �J�e�a�n� �F�l�o�r�e�n�t� �A�'�K�e�m�p�i�s��A�l�b�a�n�i�e��0�.�0�0�

  2. #22
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    je peux voir un bout du code ?

  3. #23
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 67
    Par défaut
    j'ai utilisé un fichier que j'ai téléchargé au net , ce fichier doit pouvoir communiquer avec joomla 1.5
    et qd je dois generer j'appel la methode render();

    voici donc le code que j'ai plus ou moins modifié:

    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
    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
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
     
    // Check to ensure this file is included in Joomla!
    defined('_JEXEC') or die();
     
    //Include Joomla Classes
    JLoader::import('joomla.filesystem.folder');
     
    //Include PHPExcel classes
    JLoader::import('phpexcel.Classes.PHPExcel');
    JLoader::import('phpexcel.Classes.PHPExcel.IOFactory');
     
    class JDocumentXLS extends JDocument
    {
      private $_name = 'export';
      private $_phpexcel = null;
      /*------------------------------------------------------------------------------------------------------------
      Method Name : __construct
      Purpose     : Class Constructor
      Parameter   : $options
      Returns     : None
      Revisions   :
      ------------------------------------------------------------------------------------------------------------*/
      function __construct($options = array())
      { parent::__construct($options);
        $this->setMimeEncoding('application/vnd.ms-excel');
    	//$this->setMimeEncoding('application/msexcel ');
        $this->setType('xls');
        if(isset($options['name'])) $this->setName($options['name']);
      }
       /*------------------------------------------------------------------------------------------------------------
      Method Name : getName
      Purpose     : To get the current filename for the excel file
      Parameter   : None
      Returns     : String
      Revisions   :
      ------------------------------------------------------------------------------------------------------------*/
      function getName()
      { return $this->_name;
      }
    /*------------------------------------------------------------------------------------------------------------
      Method Name : getPhpExcelObj
      Purpose     : To get the PHPExcel object for use
      Parameter   : None
      Returns     : Object
      Revisions   :
      ------------------------------------------------------------------------------------------------------------*/
      function &getPhpExcelObj()
      { if(!$this->_phpexcel) $this->_phpexcel = new PHPExcel();
        return $this->_phpexcel;
      }
    /*------------------------------------------------------------------------------------------------------------
      Method Name : render
      Purpose     : To render the document
      Parameter   : @param boolean  $cache    If true, cache the output
      Parameter   : @param array   $params   Associative array of attributes
      Returns     : String
      Revisions   :
      ------------------------------------------------------------------------------------------------------------*/
      function render($cache = false, $params = array())
      { //Write out response headers
        JResponse::setHeader('Pragma', 'public', true);
        JResponse::setHeader('Expires', '0', true);
        JResponse::setHeader('Cache-Control', 'must-revalidate, post-check=0, pre-check=0', true);
    	//************************************************************************************
    	JResponse::setHeader('Content-Type', 'application/vnd.ms-excel', true);
    	//JResponse::setHeader('Content-Type', 'application/msexcel ', true);
    	//************************************************************************************
        JResponse::setHeader('Content-Type', 'application/force-download', true);
        JResponse::setHeader('Content-Type', 'application/octet-stream', true);
        JResponse::setHeader('Content-Type', 'application/download', true);
        JResponse::setHeader('Content-Transfer-Encoding', 'binary', true);
    	//JResponse::setHeader('Content-disposition', 'attachment; filename='.$this->getName() . '.xls; size=' . strlen($buffer) . ';', true);
    	JResponse::setHeader('Content-Disposition', 'inline; filename='.$this->getName() . '.xls; size=' . strlen($buffer) . ';', true);
        //Set workbook properties to some defaults if not currently set
        //Currently all these properties are not set for the Excel5 (xls) writer but are here in case future versions do
        $objPhpExcel =& $this->getPhpExcelObj();
        $config = new JConfig();
        $workbook_properties = $objPhpExcel->getProperties();
        if(!$workbook_properties->getCategory()) $workbook_properties->setCategory('Exported Report From '. $config->sitename);
        if($workbook_properties->getCompany() == 'Microsoft Corporation' && $config->sitename) $workbook_properties->setCompany($config->sitename);
        if($workbook_properties->getCreator() == 'Unknown Creator' && $config->sitename) $workbook_properties->setCreator($config->sitename);
        if(!$workbook_properties->getDescription()) $workbook_properties->setDescription($this->getDescription());
        if(!$workbook_properties->getLastModifiedBy()) $workbook_properties->setLastModifiedBy($config->sitename);
        if(!$workbook_properties->getSubject()) $workbook_properties->setSubject($this->getTitle());
        if($workbook_properties->getTitle() == 'Untitled Spreadsheet' && $this->getTitle()) $workbook_properties->setTitle($this->getTitle());
        $objPhpExcel->setProperties($workbook_properties);
        //Get the Excel 5 type IO object to write out the binary document
        $objWriter = PHPExcel_IOFactory::createWriter($objPhpExcel, 'Excel5');
        if(JFolder::exists($config->tmp_path)) $objWriter->setTempDir($config->tmp_path);
        //Save the file to the PHP Output Stream and read the stream back in to set the buffer
        ob_start();
    	//***************************** MODIF VERDY *****************************************
        $objWriter->save('php://output');
        //$objWriter->save('C:\\'.$this->getName() .'.xls');
        //$objWriter->save(str_replace('.php', '.xls', __FILE__));
    	//***********************************************************************************
        $buffer = ob_get_contents();
        ob_end_clean();
     
        return $buffer;
      }
    /*------------------------------------------------------------------------------------------------------------
      Method Name : setPhpExcelObj
      Purpose     : To set the PHPExcel object for use
      Parameter   : $objPhpExcel
      Returns     : None
      Revisions   :
      ------------------------------------------------------------------------------------------------------------*/
      function setPhpExcelObj($objPhpExcel)
      { $this->_phpexcel = $objPhpExcel;
      }
       /*------------------------------------------------------------------------------------------------------------
      Method Name : setName
      Purpose     : To set the current filename for the excel file
      Parameter   : $name
      Returns     : None
      Revisions   :
      ------------------------------------------------------------------------------------------------------------*/
      function setName($name)
      { $this->_name = JFilterOutput::stringURLSafe($name);
      }
    }

  4. #24
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Remplace ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     $objWriter = PHPExcel_IOFactory::createWriter($objPhpExcel, 'Excel5');
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $objWriter = new PHPExcel_Writer_Excel5($objPhpExcel);

  5. #25
    Membre confirmé
    Inscrit en
    Novembre 2006
    Messages
    67
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 67
    Par défaut
    Citation Envoyé par MaitrePylos Voir le message
    Remplace ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     $objWriter = PHPExcel_IOFactory::createWriter($objPhpExcel, 'Excel5');
    par

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $objWriter = new PHPExcel_Writer_Excel5($objPhpExcel);
    j'ai remplaçé mais toujours pareil

  6. #26
    Membre éclairé
    Homme Profil pro
    Responsable Applicatif / Développeur
    Inscrit en
    Mai 2007
    Messages
    495
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Responsable Applicatif / Développeur

    Informations forums :
    Inscription : Mai 2007
    Messages : 495
    Par défaut
    Bonjour ,
    Est il possible au lieu de sélectionner une cellule
    de sélectionner une ligne.

    Je m'explique. je voudrais mettre à jour un xlsx et donc par exemple sélectionner la ligne 5, et la premiere colonne ou il n'y a rien d'écrire, pour chaque jour compléter cette ligne.

    merci.

  7. #27
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 20
    Par défaut
    Citation Envoyé par verdi-verda Voir le message
    j'ai suivi le tutoriel mais cette fois ci ça m'ouvre une page avec des caractères bizarre est ce que c'est un problème d'encodage ? et si c le cas quel bout de code devrais écrire pour transformer cela ?
    j'ai ce genre de texte :
    Bjour à tous,
    Tout d'abord merci à maître Pylos pour son super tuto
    Mais j'ai exactement le même problème que ci-dessus pour le téléchargement des fichiers Excel...
    Dès que c'est ouvert par le navigateur mon fichier est invalide...
    Pouvez-vous m'aider?

  8. #28
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Montre un bout de ton code, qu'on puisse tester !

  9. #29
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 20
    Par défaut
    Bin c'est celui de ton tuto sans la classe qui contient les fonctions affiche et enregistre.
    Après j'ai testé ce que tu as dit à verdi-verda:
    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
     
    include 'PHPExcel/IOFactory.php';
     
     
     
    //on instancie un objet de lecture
    $objReader = PHPExcel_IOFactory::createReader('Excel5');
     
    //on charge le fichier qu'on veut lire
     
    $objPHPExcel = $objReader->load("fic.xls");
     
    //on modifie ce fichier
     
    $objPHPExcel->getActiveSheet()->setCellValue('I9','BLABLA');
     
     
    //on crée un nouveau fichier
    $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
     
    //on le sauve
    $objWriter->save('coco.xls');
     
     header('Content-type: application/vnd.ms-excel');
     header('Content-Disposition:inline;filename=coco.xls ');
     $objWriter->save('php://output');

  10. #30
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Alors, soit

    Vous l'enregistrer, et vous faites un lien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    //on le sauve
    $objWriter->save('coco.xls');
    mais à essayer ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    //on le sauve
    $objWriter->save('coco.xls');
     
     header('Content-type: application/vnd.ms-excel');
     header('Content-Disposition:inline;filename=coco.xls ');
     echo '/chemin/fichier/coco.xls'

  11. #31
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 20
    Par défaut
    ça écrit le chemin de coco.xls dans le fichier excel téléchargé...

  12. #32
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Je n'ai pas encore essayé d'afficher le fichier Excel au départ d'un fichier existant.

    Je tenterais ce soir pour voir la procédure

  13. #33
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 20
    Par défaut
    ça fait la même chose avec un fichier vierge...
    Le fichier téléchargé ou ouvert depuis l'application est toujours erroné..
    Donc ça ne viens pas de là.

  14. #34
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Le fichier de départ est bien un fichier Excel 5 ?

  15. #35
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 20
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    include 'PHPExcel.php';
     
    include 'PHPExcel/Writer/Excel5.php';
    		$workbook=new PHPExcel();
    		$sheet= $workbook->getActiveSheet();
    		$sheet->setCellValue('A1','Belou');
    		$writer=new PHPExcel_Writer_Excel5($workbook);
    		header('Content-type: application/vnd.ms-excel');
    		header('Content-Disposition:inline;filename=Fic.xls');
    		$writer->save('php://output');
    Ceci ne fonctionne pas non plus. Enfin génère un fichier Excel erroné...
    J'ai Excel 2003 et en remplaçant Writer_Excel5 par Writer_Excel2007 cela fonctionne encore moins bien..

  16. #36
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    As-tu résolu ton problème ?

  17. #37
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 15
    Par défaut Incrementation du nom du fichier
    Bonjour et un grand merci pour tes tutos.

    J'utilise la methode ci-dessous pour ecrire mon fichier, c'est ok mais j'aimerais pouvoir incrementer le nom du fichier pour qu'il n'ecrase pas l'ancien en y ajoutant la date du jour par exemple.

    Toutes mes tentatives d'ajout de variable au nom sont en echec.

    Une solution ?

    Merci d'avance

    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
     
    require_once '../Classes/PHPExcel.php';
    require_once '../Classes/PHPExcel/IOFactory.php';
    include '../Classes/PHPExcel/Writer/Excel5.php';
     
    // Create new PHPExcel object
    $objPHPExcel = new PHPExcel;
     
    *******
    Ecriture des cellules  via mysql
     
    *******
     
    $writer = new PHPExcel_Writer_Excel5($objPHPExcel);
    $records ='./invoice.xls';
    $writer->save($records);

  18. #38
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    ceci fonctionne chez moi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $writer = new PHPExcel_Writer_Excel5($objPHPExcel);
    $incremente = '1';
    $records ='./invoice'.$incremente.'.xls';
    $writer->save($records);

  19. #39
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 15
    Par défaut
    Nickel, merci.

    Je n'entourais pas ma variable de 2 points, je n'en mettais qu'un devant.....

  20. #40
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2009
    Messages : 15
    Par défaut Variables dans une formule
    Bonjour,

    Mon but est d'attribuer à une cellule la valeur d'une autre cellule située sur la même ligne si et seulement si une troisième cellule de la même ligne n'est pas vide.... soit :

    montant_payé=0 si date_paiement=rien sinon montant_payé=montant_facture

    Cette ligne est incrementée dans une boucle, c'est la raison qui m'oblige à trouver une solution pour incrementer la ligne et la cellule dans la formule.

    En excel je fais comme suit : =+SI(G2="";0;$E2)

    Mon code PHP qui ne fonctionne pas (cellule vide) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow("$col", "$lig", '=IF((('$col'-5),'$lig')="";0;E2)');
    Une expertise ?

    Merci d'avance.

Discussions similaires

  1. [Excel] Bug I.Explorer après génération de fichiers excel
    Par wtoueress dans le forum Bibliothèques et frameworks
    Réponses: 20
    Dernier message: 30/06/2008, 13h40
  2. Génération de fichier Excel Ou Word
    Par Maz85 dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 23/08/2007, 17h28
  3. Génération de fichiers Excel à partir de code HTML
    Par grincheux dans le forum ASP.NET
    Réponses: 2
    Dernier message: 01/06/2007, 14h39
  4. [Excel] Génération de fichiers
    Par abidi_niz dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 11/07/2006, 09h29
  5. [VBA-E]Génération de fichiers Excel à partir d'un autre
    Par cyrille2k5 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 04/05/2006, 10h27

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