Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

ECRITURE DE FICHIERS CSV (EXCEL) [ OBJECT ]


Information sur la source

Catégorie :Class et Objet ( POO ) Niveau : Débutant Date de création : 12/10/2004 Date de mise à jour : 20/10/2004 00:05:54 Vu : 15 292

Note :
10 / 10 - par 1 personne
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (12)
Ajouter un commentaire et/ou une note

Description

Cette classe Permet d'ecrire simplement et rapidement des fichiers Excel!
 

Source

  • <?
  • /*
  • * Ecriture de fichiers Csv (Excel)
  • * Par MAMMANA Jean Charles
  • *
  • * Cette class simple permet d'ecrire des fichiers Excel
  • * au format point virgule.
  • * J'ai ecris cette petite class en PHP4 pour quelle soit
  • * compatible avec tous les serveur php (non pas uniquement
  • * PHP5).
  • *
  • *
  • * -- Description des Membres --
  • *
  • * makeCsv(String filename) est le constructeur de la class
  • * il defini le nom du fichier qui sera créé.
  • *
  • * addLine(String[] line, int numberLine)
  • * ajoute une ligne ( une ligne est un tableau)
  • * chaque element du tableau est un element de la ligne.
  • * on donne le numero de la ligne que l'on souhaite
  • * remplir.
  • *
  • * addCol(String[] line, int numberCol)
  • * Idem que pour addLine() mais remplis une colonne.
  • * prends en 2em parametre le numero de la colonne à
  • * remplir.
  • *
  • * setValueAt(int x,int y,String v)
  • * remplis une case aux coordonnées x,y
  • *
  • * maxX() et maxY()
  • * retourne la taille (en nombre de cellules)
  • * de lignes et de colonnes du tableau.
  • *
  • * createCsv()
  • * Creation du fichier csv sur le serveur.
  • *
  • * downloadCsv()
  • * Creation du fichier csv en memoire pour telechargement!
  • *
  • *
  • *
  • * -----------------------------
  • *
  • *
  • */
  • class MakeCsv{
  • var $fileName;
  • var $csv = array();
  • function MakeCsv($fileName){
  • $this->fileName = $fileName;
  • }
  • function addCol($array,$l){
  • $this->csv[$l-1] = $array;
  • }
  • function addLine($array,$c){
  • for($i=0;$i<count($array);$i++){
  • $this->csv[$i][$c-1] = $array[$i];
  • }
  • }
  • function setValueAt($x,$y,$v){
  • $this->csv[$x-1][$y-1] = $v;
  • }
  • function createCsv(){
  • $fp = @fopen($this->fileName,"w") or
  • die('<br /><b>Fatal error</b>: Can\'t open <b>'.$this->fileName.'</b> in <b>'.__FILE__.'</b> on line <b>'.(__LINE__-1).'</b><br />');
  • for($y=0;$y<$this->maxY();$y++){
  • for($x=0;$x<$this->maxX();$x++){
  • if(!empty($this->csv[$x][$y]))
  • fwrite($fp,$this->csv[$x][$y],strlen($this->csv[$x][$y]));
  • fwrite($fp,';',1);
  • }
  • fwrite($fp,"\r\n",2);
  • }
  • fclose($fp);
  • }
  • function downloadCsv(){
  • header("Content-disposition: attachment; filename=\"$this->fileName\"");
  • header("Content-Type: application/force-download");
  • header("Content-Transfer-Encoding: binary");
  • for($y=0;$y<$this->maxY();$y++){
  • for($x=0;$x<$this->maxX();$x++){
  • if(!empty($this->csv[$x][$y]))
  • echo '"'.$this->csv[$x][$y].'"';
  • // virgule pour W2K ou point pour Xp selon la version de Excel
  • echo ';';
  • }
  • echo "\r\n";
  • }
  • exit();
  • }
  • function maxX(){
  • $max = 0;
  • while(list($k,) = each($this->csv)){
  • if($k>$max) $max = $k;
  • }
  • reset($this->csv);
  • return $max+1;
  • }
  • function maxY(){
  • $max = 0;
  • while(list($k,) = each($this->csv)){
  • while(list($k2,) = each($this->csv[$k])){
  • if($k2>$max) $max = $k2;
  • }
  • reset($this->csv[$k]);
  • }
  • reset($this->csv);
  • return $max+1;
  • }
  • }
  • ?>
<?

/*
*           Ecriture de fichiers Csv (Excel)
*              Par MAMMANA Jean Charles
*
*  Cette class simple permet d'ecrire des fichiers Excel
*  au format point virgule.
*  J'ai ecris cette petite class en PHP4 pour quelle soit
*  compatible avec tous les serveur php (non pas uniquement
*  PHP5).
*
*
*      -- Description des Membres --
*
*  makeCsv(String filename) est le constructeur de la class
*      il defini le nom du fichier qui sera créé.
*
*  addLine(String[] line, int numberLine)
*      ajoute une ligne ( une ligne est un tableau)
*      chaque element du tableau est un element de la ligne.
*      on donne le numero de la ligne que l'on souhaite
*      remplir.
*
*  addCol(String[] line, int numberCol)
*      Idem que pour addLine() mais remplis une colonne.
*      prends en 2em parametre le numero de la colonne à
*      remplir.
*
*  setValueAt(int x,int y,String v)
*      remplis une case aux coordonnées x,y
*
*  maxX() et maxY()
*      retourne la taille (en nombre de cellules)
*      de lignes et de colonnes du tableau.
*
* createCsv()
*      Creation du fichier csv sur le serveur.
*
* downloadCsv()
*      Creation du fichier csv en memoire pour telechargement!
*
*
*
*      -----------------------------
*
*
*/

class MakeCsv{

        var $fileName;
        var $csv = array();

        function MakeCsv($fileName){
                $this->fileName = $fileName;
        }
        

        function addCol($array,$l){
                $this->csv[$l-1] = $array;
        }

        function addLine($array,$c){
                for($i=0;$i<count($array);$i++){
                        $this->csv[$i][$c-1] = $array[$i];
                }
        }

        function setValueAt($x,$y,$v){
                $this->csv[$x-1][$y-1] = $v;
        }
        
        function createCsv(){
                $fp = @fopen($this->fileName,"w") or
                die('<br /><b>Fatal error</b>:  Can\'t open <b>'.$this->fileName.'</b> in <b>'.__FILE__.'</b> on line <b>'.(__LINE__-1).'</b><br />');

                

                for($y=0;$y<$this->maxY();$y++){
                        for($x=0;$x<$this->maxX();$x++){
                                if(!empty($this->csv[$x][$y]))
                                        fwrite($fp,$this->csv[$x][$y],strlen($this->csv[$x][$y]));
                                fwrite($fp,';',1);
                        }
                        fwrite($fp,"\r\n",2);
                }
                fclose($fp);

        }
        
        
        function downloadCsv(){
                header("Content-disposition: attachment; filename=\"$this->fileName\"");
                header("Content-Type: application/force-download");
                header("Content-Transfer-Encoding: binary");
                 for($y=0;$y<$this->maxY();$y++){
                        for($x=0;$x<$this->maxX();$x++){
                                if(!empty($this->csv[$x][$y]))
                                        echo '"'.$this->csv[$x][$y].'"';
                                // virgule pour W2K ou point pour Xp selon la version de Excel
                                echo ';';
                        }
                        echo "\r\n";
                }
                exit();
        }


        function maxX(){
                $max = 0;
                while(list($k,) = each($this->csv)){
                        if($k>$max) $max = $k;
                }
                reset($this->csv);
                return $max+1;
        }

        function maxY(){
                $max = 0;
                while(list($k,) = each($this->csv)){
                        while(list($k2,) = each($this->csv[$k])){
                                if($k2>$max) $max = $k2;
                        }
                        reset($this->csv[$k]);
                }
                reset($this->csv);
                return $max+1;
        }

}
?>

Conclusion

j'ai redigé cette petite class car j'en avais marre de me tapper l'adaptation de fichiers de configurations en excel à la paluche...
elle n'est pas bien complete, mais ca simplicité permettra aux debutants d'aprehender la notion d'objets en PHP (meme si PHP5 permet la notion de portée)
 

Historique

13 octobre 2004 10:17:47 :
maj
13 octobre 2004 10:34:00 :
maj
20 octobre 2004 00:05:54 :
Possibiliter de telecharger le fichier sans l'ecrire sur le serveur!

Commentaires et avis

signaler à un administrateur
Commentaire de orsam le 17/01/2005 23:05:57

Salut !

Bon, ton code est exactement ce qu'il me faut, cependant, je suis debutant en PHP, et je n'est aucune idée de la facon d'utiliser ta "Class".

Peut tu me donner quelques petites explications ?

Merci

Orsam

signaler à un administrateur
Commentaire de zoukozouko le 07/12/2006 13:09:19

Possible d'avoir un petit code pour LIRE les fichiers excel???
Merci

signaler à un administrateur
Commentaire de rmic210282 le 29/01/2007 11:50:58

slt,
merci pour cette class, cependant que je lance la methode setvalueat(X,Y,V), la case (X,Y) ne change pas de valeur PAR CONTRE elle s'ajoute Y lignes plus bas! ça fait un addline avec un offset de Y lignes lol !

signaler à un administrateur
Commentaire de Guydjar le 22/02/2007 16:28:15

Slt!
Je suis dans le meme cas qu'ORSAM, je suis debutant et je souhaiterai savoir comment on utilise cette class.
Si quelqu'un l'utilise pour une appli, ca m'interesse apres c'est de l'adaptation.

Merci

Guydjar

signaler à un administrateur
Commentaire de MusSDev le 27/04/2007 14:39:00

Salut,
Cette class fonctionne très bien mais seulement pour générer des fichiers de petites taille. Après quelques recherches, les lenteurs sont du aux fonction maxX() et maxY() et plus particulièrement maxY().
J'ai donc procédé a des modifications de la classe pour obtenir une génération instantané.
Ajout de deux variables :
var $csv = array();
var $maxY = 0;
var $maxX = 0;

Puis modifications des fonctions :
function addCol($array,$l){
  $this->maxX++;
  $this->csv[$l-1] = $array;
}
    
function addLine($array,$c){
  $this->maxY++;
  $this->maxX = count($array);
  for($i=0;$i<count($array);$i++){
    $this->csv[$i][$c-1] = $array[$i];
  }
}
...

Et enfin les lignes dans les fonctions createCSV & downloadCSV :
for($y=0;$y<$this->maxY();$y++){
for($x=0;$x<$this->maxX();$x++){
par
for($y=0;$y<$this->maxY;$y++){
for($x=0;$x<$this->maxX;$x++){

@+

PS: je cherche a intégrer la gestion de l'unicode pour afficher correctement les accents sous Excel et je reviendrais poster un message

signaler à un administrateur
Commentaire de dadoudamiendutka le 06/06/2007 14:26:09

Salut psyjc,

Je met à dispo ton code avec les modifs de MusSDev sur mon espace Web.
Je pense aux gens comme moi qui ont la flemme de faire des copier/coller.

. Version du 06.06.2007
. Nom Fichier function.excel.inc.php
. http://damien.dutka.free.fr/function.excel.inc.php

(Bien sûr si ça dérange les modérateurs ou bien toi psyjc, je retirerais le fichiers)

signaler à un administrateur
Commentaire de psyjc le 06/06/2007 14:56:36

Pas de soucis pour moi tant que tu laisse le header :)
Bonne initiative.

signaler à un administrateur
Commentaire de dadoudamiendutka le 06/06/2007 17:21:59

Aucun soucis pour le header,
Aucun soucis pour le header,
Aucun soucis pour le header,
;)

signaler à un administrateur
Commentaire de MusSDev le 08/06/2007 14:26:22

Je cherche la possibilité de faire cette export en unicode, mais toutes mes tentatives sont restées sans resultat
Si quelqu'un a une solution, je suis preneur

signaler à un administrateur
Commentaire de cedric15 le 30/07/2007 23:49:47

Comment utilise t-on cette class ?

signaler à un administrateur
Commentaire de julian75 le 12/09/2007 13:52:51

require ("include/export.class.php");

$mesdonnees[1] = array("DIDEROT", "Denis", "philospohe", "1713", "1784");
$mesdonnees[2] = array("ROUSSEAU", "Jean-Jacques", "philospohe", "1712", "1778");
$mesdonnees[3] = array("DE BOUGAINVILLE", "Louis-Antoine", "ecrivain", "1729", "1811");
$mesdonnees[4] = array("CAZOTTE", "Jacques", "ecrivain", "1720", "1792");
$mesdonnees[5] = array("CONSTANT", "Benjamin", "ecrivain", "1767", "1830");
$mesdonnees[6] = array("CREBILLON", "Claude", "ecrivain", "1707", "1777");
$mesdonnees[7] = array("DAMILAVILLE", "Étienne Noël", "ecrivain", "1723", "1768");
$mesdonnees[8] = array("DEFOE", "Daniel", "ecrivain", "", "");
$mesdonnees[9] = array("DUMARSAIS", "César", "ecrivain", "1676", "1756");
$mesdonnees[10] = array("DE MARIVAUX", "Pierre", "ecrivain", "1688", "1763");
$mesdonnees[11] = array("DE SADE", "Donatien", "ecrivain", "1740", "1814");

$export = new MakeCsv;
$export->MakeCsv("monfichier.csv");

foreach ($mesdonnees as $key => $line) {
$export->addLine($line, $key);
}
$export->createCsv();

signaler à un administrateur
Commentaire de Tartuffe le 30/10/2007 15:30:21

J'ai mis en ligne le source, et l'explication d'usage de Julian75 (en virant les "$mesdonnees" pour utiliser mon array, et l'erreur devient :

Missing argument 1 for MakeCsv::MakeCsv(), called in /../fichier.php on line 63 and defined in /../fonction/export.class.php on line 41

Fatal error: Can't open monfichier.csv in /../fonction/export.class.php on line 51

D'où 2 questions liées ?
- l'argument manquant c'est le fichier ?
- pourquoi le fichier ne s'ouvre pas? Question de droit + répertoire ? Il faut le créer au préalable ? (beurk j'aime pas la gestion de 'file')

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Janvier 2009
LMMJVSD
   1234
567891011
12131415161718
19202122232425
262728293031 

Consulter la suite du CalendriCode



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel BAÏSE, Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,234 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.