Ecriture de fichiers csv (excel) [ object ]

Soyez le premier à donner votre avis sur cette source.

Snippet vu 22 219 fois - Téléchargée 33 fois

Contenu du snippet

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

Source / Exemple :


<?

/*

  • 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)

A voir également

Ajouter un commentaire

Commentaires

cs_Tartuffe
Messages postés
39
Date d'inscription
jeudi 27 mai 2004
Statut
Membre
Dernière intervention
18 février 2008
2 -
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')
julian75
Messages postés
8
Date d'inscription
lundi 21 novembre 2005
Statut
Membre
Dernière intervention
11 décembre 2017
-
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();
cs_cedric15
Messages postés
1
Date d'inscription
dimanche 23 mai 2004
Statut
Membre
Dernière intervention
30 juillet 2007
-
Comment utilise t-on cette class ?
MusSDev
Messages postés
2
Date d'inscription
mercredi 7 décembre 2005
Statut
Membre
Dernière intervention
8 juin 2007
-
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
dadoudamiendutka
Messages postés
3
Date d'inscription
dimanche 3 juillet 2005
Statut
Membre
Dernière intervention
8 décembre 2007
-
Aucun soucis pour le header,
Aucun soucis pour le header,
Aucun soucis pour le header,
;)

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.