begin process at 2012 02 11 01:27:46
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Class et Objet ( POO )

 > ECRITURE DE FICHIERS CSV (EXCEL) [ OBJECT ]

ECRITURE DE FICHIERS CSV (EXCEL) [ OBJECT ]


 Information sur la source

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
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 :20 177

Auteur : psyjc

Ecrire un message privé
Site perso
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!

 Sources du même auteur

Source avec une capture INFORMATIONS SUR L'ETAT D'UN SERVEUR MS WIN.
Source avec Zip Source avec une capture [OBJECT] CREATION D'ORGANIGRAMMES EN HTML
Source avec Zip GENERATEUR DE SMILEYS CARAMAIL POUR MSN
Source avec Zip GENERATEUR DE SMILEY MSN DYNAMIQUE!
SMILEY EN ASCII (TOTALEMENT SANS INTERET)

 Sources de la même categorie

CLASSE DE GESTION DE "VARIABLES GLOBALES D'ENVIRONNEMENT" par pifou25
Source avec Zip COLLECTION.CLASS.MIN.PHP par thunderhunter
Source avec Zip SIMPLETEMPLATE par thunderhunter
Source avec Zip Source avec une capture VOIR QUI VISITE VOTRE SITE par Dariumis
Source avec Zip CLASS SIMPLE CBASEDONNEE par smag42

Commentaires et avis

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

Commentaire de zoukozouko le 07/12/2006 13:09:19

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

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 !

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

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

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)

Commentaire de psyjc le 06/06/2007 14:56:36

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

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,
;)

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

Commentaire de cedric15 le 30/07/2007 23:49:47

Comment utilise t-on cette class ?

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();

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

Comparez les prix

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), 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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,668 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales