Aide pour une class csv(Excel)

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Aide pour une class csv(Excel)

par zeus » 13 févr. 2006, 16:05

juste une petite précision, à part, pour tagger un sujet [RESOLU], il ne faut pas éditer le 1er message pour changer le titre mais cliquer sur le bouton [RESOLU] qui se trouve en haut à gauche des messages que tu as ouvert ;)

J'ai modifié ce message pour toi mais pense y la prochaine fois :pouce:

par Maitrepylos » 13 févr. 2006, 15:42


2eme erreur :
Ce doit être l'utilisation du header avec un caractère HTML avant
L'erreur viens de là, il ne faut pas mettre le ob_start(); dans la Class, mais dans le fichier ausquel je fais appel à la Class(logique).

De plus j'ai fais une nouvelle Class qui répond plus à mes besoins.


class FichierExcel {
	
private 
	$csv = Null;
	/**
	 * Cette ligne permet de créer les colonnes du fichers Excel
	 * Cette fonction est totalement faculative, on peut faire la même chose avec la
	 * fonction insertion, c'est juste une clarté pour moi
	 */
	function Colonne($file) {
		
		$this->csv.=$file."\n";
		return $this->csv;
		
	}
	
	/**
	 * Insertion des lignes dans le fichiers Excel, il faut introduire les données sous formes de chaines
	 * de caractaire.
	 * Attention a séparé avec une virgule.
	 */
	function Insertion($file){
		
		$this->csv.=$file."\n";
		return $this->csv;
	}
	
	/**
	 * fonction de sortie du fichier avec un nom spécifique.
	 *
	 */
	function output($NomFichier){
	
		//header("Content-type: application/vnd.ms-excel");
		header("Content-disposition: attachment; filename=$NomFichier.csv");
		print $this->csv;
		exit;
		
	}
}
J'ai mis le header("Content-type: application/vnd.ms-excel"); en commentaire par ce que sous windows il ajoute automatiquement xls.

merci de votre aide

par zeus » 10 févr. 2006, 15:10

1ere erreur :
A mon avis, l'erreur vient d'ici. Tu essaye d'ouvrir un fichier qui n'existe pas
Il va surement falloir que tu passes par un objet DOM pour ouvrir un objet Excel inexistant

2eme erreur :
Ce doti être l'utilisation du header avec un caractère HTML avant

par Maitrepylos » 10 févr. 2006, 13:12

Désolé

j'ai ceci

Code : Tout sélectionner

Warning: fopen(/Dossier/gg.csv) [function.fopen]: failed to open stream: Permission denied in /var/www/Ekoke/Class/ClassFicheExcel.php on line 15
et quand bien même si je fais un chmod a la main j'obtient

Code : Tout sélectionner

Warning: Cannot modify header information - headers already sent by (output started at /var/www/Ekoke/Tools/HtmlInc.php:5) in /var/www/Ekoke/Class/ClassFicheExcel.php on line 44
du coup je rajoute a la fonction ceci
function output(){
	ob_start();
	header("content-type: application/vnd.ms-excel");
	$this->fp;
	ob_end_clean();
		
	}
et là rien ne se produit, le fichier est généré, mais il ne l'envoie pas vers Excel.

Merci de votre aide

par zeus » 10 févr. 2006, 11:55

j'ai rajouté cette fonction, mais cela ne fonctionne pas
C'est à dire ? J'ai cassé ma boule de cristal hier soir et je ne devine pas les erreurs ;)
Tu as une erreur ou rien ne s'affiche ?

par Maitrepylos » 10 févr. 2006, 11:46

j'ai rajouté cette fonction, mais cela ne fonctionne pas
function output(){
	header("content-type: application/vnd.ms-excel");
	$this->fp;
		
	}
$fichier->output();
merci de votre aide

par Maitrepylos » 09 févr. 2006, 16:48

Quand le client génére le fichier pour qu'il s'ouvre automatiquement sur ça machine.

Merci

par jeff » 09 févr. 2006, 16:29

Pourriez-vous me dire comment ouvrir automatiquement ce fichier avec Excel.
peut eclaisir ce point (client/serveur)

par Maitrepylos » 09 févr. 2006, 16:20

Bonjour Jeff, peux tu être plus explicite svp

par jeff » 09 févr. 2006, 16:10

tu veut l'envoyé vers un client ou sur le serveur, si c'est un client de toute facon ca se fera avec un header

maintenat au niveau de ta class tu peut faire methode Output
public function output($choix,$name=null)
{
swicth($choix)
{
case 'send':break;//ici on envoi les bonnes entetes
case 'save':break://ici on enregiste le fichier
default:break;
}
}

par pascaltje » 09 févr. 2006, 16:08

quelques liens:
- une méthode hyper simple, avec des entetes + tableaux html (voir dans les commentaires)
http://www.estvideo.com/dew/index/2004/ ... s-avec-php
- formats de cellules Excel en html
http://www.agoric.com/sources/software/htmltoExcel

Bon codage!

A+

Pascal

par Maitrepylos » 09 févr. 2006, 15:48

En fait, je voudrais ne pas l'enregistrer ce fichier, mais le créer à la volé, et une fois généré, qu'il me propose soit de l'ouvrir, soit de l'enregistrer, un peu comme si je mettais un Header
header("content-type: application/vnd.ms-excel");
Mais cela ne fonctionne pas

ps : c'est une de mes premières class,(2 max à mon actif)

par zeus » 09 févr. 2006, 15:38

Qu'est ce que tu entend par "ouvrir automatiquement ce fichier" ?
Ne pas avoir besoin de faire appel à la méthode "Ouvrir()" ?
Si c'est ça, il faut que tu créé un constructeur __FicheExcel qui va se charger d'ouvrir ton fichier.

Mais ne risque tu pas de trop spécialiser ta fonction en ne proposant pas l'url du fichier à ouvrir ?

Aide pour une class csv(Excel)

par Maitrepylos » 09 févr. 2006, 15:33

Bonjour, je viens de faire une petite class en php5.1, qui me permet de générer mes fichier .csv
<?php

class FicheExcel 	{

private 
$fp = null;

	
public 
	/**
	 * Ouvre le fichier en écriture seul et place le pointeur au début du fichier
	 */
	function Ouvrir() 	{
		
		$this ->fp = fopen('gg.csv', 'w');
		return $this->fp;		
								}
	/**
	 * Function permettant d'écrire dans le fichier
	 *
	 * $list est le paramètre qui doit recevoir un array
	 * ex $fichier->Insertion(array("1,2,3","4,5,6")).
	 * Chaque fois qu'il rencontre une virgule en dehors de la chaine de caractère il passe a la ligne.
	 * Chaque fois qu'il rencontre une virgule dans la chaine de caractère il passe a la cellule suivante.
	 */
	function Insertion($list)	{
		
		foreach ($list as $line) 	{
   		fputcsv($this->fp, split(',', $line));
									}

								}
	
	/**
	 * Ferme le fichier
	 *
	 */
	function fermer()	{
		
		fclose($this->fp);
						}
			
		
					}
?>
j'obtient bien le fichier comme ceci
<?php
include('../Class/ClassFicheExcel.php');

$fichier = new FicheExcel();
$fichier->Ouvrir();
$fichier->Insertion(array("un,deux,trois","5,3,4"));
$fichier->Insertion(array("quatre,cinq,six"));
$fichier->fermer();
?>
Pourriez-vous me dire comment ouvrir automatiquement ce fichier avec Excel.

Merci