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 :

[Excel] Excel et csv [Tutoriel]


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Candidat au Club
    Inscrit en
    Octobre 2004
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 7
    Points : 2
    Points
    2
    Par défaut [Excel] Excel et csv
    Bonjour tout le monde. j'ai apprecié le tutorial pour utiliser les objet COM avec PHP et générer des fichier excel (surtout graphique) ca le fait vraiment. Cela dit j'ai une question.

    Je dois récupérer des données formatées à partir de centaines de fichier excel. Chaque fichier contient 10 feuille toute identique en forme mais avec des données différentes biensur.

    Lorsque je vais chercher les données avec COM tout marche bien sauf que pour les date il me donne le nombre TIME qui correspond au temps UNIX. hors j'ai des date qui sont avant le TEMPS UNIX donc il me met -1. et second problème parfois les date sont mal écrite du style 12102004 au lieu de 12/10/2004.

    Enfin soit il y a possibilié de forcer la récupération dans un format texte soit il existe une possibilité d'exporter toute les feuilles d'un classeur en format CSV et dans ce cas plus de problème. MErci de me donner vos solutions si vous en avez

    GEO

  2. #2
    Membre éclairé
    Avatar de Kioob
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 550
    Points : 764
    Points
    764
    Par défaut
    hello,

    j'ai rencontré ce genre de problème il y a longtemps, à l'époque j'avais opté pour une solution du genre :
    1) j'ouvre un fichier excel (via PHP)
    2) pour chaque feuille je fais "enregistrer sous..." => CSV
    3) je passe au fichier suivant

    euh... c'est tout


    Enfin perso si j'ai opté pour le CSV, ce n'était pas à cause des dates mais surtout pour un gain de temps. Le traitement était beaucoup plus rapide en passant par l'étape conversion CSV.

  3. #3
    Candidat au Club
    Inscrit en
    Octobre 2004
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 7
    Points : 2
    Points
    2
    Par défaut ok cool
    d'acccord mais alors commen ttu fais ton exporte csv STP

  4. #4
    Membre éclairé
    Avatar de Kioob
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 550
    Points : 764
    Points
    764
    Par défaut
    pour ça, je te laisse te renseigner auprès de Google et des nombreux tutoriaux... perso je ne m'en souviens plus, et pas moyen de mettre la main sur le code en question...

    M'enfin, ce doit etre un truc de ce genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $wkb->SaveAs($dest,xlNormal);
    en prenant soin de selectionner la bonne feuille avant, et en remplaçant le xlNormal par la constante appropriée... (suffit de tester via une macro Excel pour avoir le nom de la bonne constante).

    Pour connaitre les valeurs des constantes : http://techsupt.windowware.com/TS/T000001033005F9.html

  5. #5
    Candidat au Club
    Inscrit en
    Octobre 2004
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 7
    Points : 2
    Points
    2
    Par défaut touvé
    voila j'ai trouvé merci pour tes conseil. je met le resultat pour ce que ca interesse.

    $classeur->saveas($dest, 6);

    6 c'est la valeur de la constante xlCSV apparament ca ne marche que avec la valeur de constante pas avec le nom

    Voila salut

  6. #6
    Membre éclairé
    Avatar de Kioob
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 550
    Points : 764
    Points
    764
    Par défaut Re: touvé
    Citation Envoyé par gledoux
    voila j'ai trouvé merci pour tes conseil. je met le resultat pour ce que ca interesse.

    $classeur->saveas($dest, 6);
    heureux de t'avoir aidé



    Citation Envoyé par gledoux
    6 c'est la valeur de la constante xlCSV apparament ca ne marche que avec la valeur de constante pas avec le nom

    Voila salut
    ça c'est normal. Pour cela il faudrait faire un define('xlCSV',6); en début de script.

  7. #7
    Candidat au Club
    Inscrit en
    Octobre 2004
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 7
    Points : 2
    Points
    2
    Par défaut re un probleme
    en fait j'ai problème voila mon script :
    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
     
    $excel = new COM("Excel.application");
    for($i = 1; $i < 11; $i++){
    // Nom du fichier à ouvrir : chemin absolu
    	$classeur = $excel->Workbooks->Open(realpath("./extract/".$rep."/".$file)); 
    	//selection de la feuille
    	$feuille = $classeur->Worksheets($i);
    	$cellule = $feuille->Range("C4");
    	$csvname = str_replace(" ","_",$cellule->value);
    		if($cellule->value != "")
    			$classeur->saveas(realpath("./extract/".$rep."/".$csvname."_".$i.".csv"), 6);
     
    	$classeur->close(); 
    	// je ferme excel 
    	$excel->Workbooks->close(); 
    	}
    	/*$classeur->close(); 
    	// je ferme excel 
    	$excel->Workbooks->close();*/ 
    	$excel->Quit();
    le proeblème c'estq quel que soit les données des feuilles il me met toujours dans tout mes fichiers csv les données de la dernière feuille. Ils sont donc tous identique.
    et autre chose. peut on éviter de demander systèmatiquement à l'utilisateur si il veut enregistrer car il y une alerte excel qui me le dmeande

    merci

  8. #8
    Membre éclairé
    Avatar de Kioob
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 550
    Points : 764
    Points
    764
    Par défaut
    arf... faut chercher un peu

    Lors de l'enregistrement au format CSV, Excel ne va conserver que la feuille ACTIVE. Il te suffit donc de selectionner cette feuille avant d'enregistrer.
    Par exemple : $feuille->select();

    Pour le warning, oui il existe au moins deux solutions : la premiere est de faire un "$classeur->saved=true;" (il me semble hein, le mieux serait de demander à Google), et la deuxième est de désactiver les messages d'alerte justement (là non plus, je ne me souviens plus).

  9. #9
    Candidat au Club
    Inscrit en
    Octobre 2004
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 7
    Points : 2
    Points
    2
    Par défaut trop bien
    trop bein ca marche... tu es mon héros.

    voila le code pour ce que ca interesse :

    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
     
    $excel = new COM("Excel.application");
    	// Nom du fichier à ouvrir : chemin absolu
    	$classeur = $excel->Workbooks->Open(realpath("./extract/".$rep."/".$file)); 
    	for($i = 1; $i < 11; $i++){
    		//selection de la feuille
    		$feuille = $classeur->Worksheets($i);
    		$feuille->select();
    		$cellule = $feuille->Range("C4");
    		if($i == 1)
    			$csvname = str_replace(" ","_",$cellule->value);
    		if($cellule->value != ""){
    			$classeur->saveas(realpath("./extract/".$rep."/".$csvname."_".$i.".csv"), 6);
    			$classeur->saved=true;
    			}
    	}	
    	$classeur->close(); 
    	// je ferme excel 
    	$excel->Workbooks->close(); 
    	$excel->Quit();

  10. #10
    Membre éclairé
    Avatar de Kioob
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2004
    Messages : 550
    Points : 764
    Points
    764
    Par défaut

  11. #11
    Candidat au Club
    Inscrit en
    Octobre 2004
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 7
    Points : 2
    Points
    2
    Par défaut une dernière question
    commetn savoir si une feuille existe
    ou alors combien il y a de feuille dans un classeur

  12. #12
    Candidat au Club
    Inscrit en
    Octobre 2004
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 7
    Points : 2
    Points
    2
    Par défaut c bon
    j'ai réglé le preoblème défférament merci

  13. #13
    Candidat au Club
    Inscrit en
    Août 2005
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Ce sujet n'est pas tout jeune, mais je me permet de le remonter car il répond en parti à un probleme que je rencontre.
    Voilà, je dois également créer des fichiers csv à partir d'un classeur Excel comportant plusieurs feuilles toutes ayant la meme forme mais pas le meme contenu tout comme gledoux.

    Cependant, seules les données de quelques cellules m'interessent et doivent etre exportées en .csv

    Je voulais savoir si vous aviez une solution pour cela, car je ne veux pas l'export de toutes les données de chaque feuille mais uniquement par exemple les cellules C2,D4,H8 de chaque feuille.
    Je ne sais pas comment faire avec cette solution php qui me semble etre la seule permettant l'export automatique en csv de tout un classeur excel.

    Merci d'avance pour toute aide.

  14. #14
    Rédactrice
    Avatar de xave
    Femme Profil pro
    Développeur Web
    Inscrit en
    Mai 2002
    Messages
    871
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 46
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2002
    Messages : 871
    Points : 1 094
    Points
    1 094
    Par défaut
    Ben tu sélectionnes les cellules de ta feuille, par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $cell=$sheet->range("A1");
    J'espère que ça t'aide un peu, sinon, il y a un bon tuto là:

    http://stephaneey.developpez.com/tutoriel/php/phpexcel/

  15. #15
    Candidat au Club
    Inscrit en
    Août 2005
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Oui selectionner ce n'est pas ce qu'il y a de plus dur
    Mais c'est surtout n'enregistrer en csv que le contenu de ces cellules qui est plus compliqué

  16. #16
    Rédactrice
    Avatar de xave
    Femme Profil pro
    Développeur Web
    Inscrit en
    Mai 2002
    Messages
    871
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 46
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2002
    Messages : 871
    Points : 1 094
    Points
    1 094
    Par défaut
    Pour récupérer la valeur de la cellule, tu fais:

    J'espère que ça t'aide... mais n'hésite pas à aller reluquer le lien que je t'ai mis...

  17. #17
    Candidat au Club
    Inscrit en
    Août 2005
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Vi j'ai regardé, ca m'a donné une idée, je pense que je vais parcourir mon fichier excel et stocker dans un tableau toutes les valeurs des cellules qui m'interessent, pour ensuite les réinséré dans un nouveau fichier excel et exporter en csv je verrais bien le resultat.

    Merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [VBA Excel] ouverture CSV (séparateur , ou ;)
    Par SDE10 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 03/07/2006, 19h32
  2. VBA-E: Pb copier-coller entre Excel et .csv
    Par tiger118 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 14/06/2006, 11h08
  3. excel to csv
    Par redzero dans le forum Macros et VBA Excel
    Réponses: 22
    Dernier message: 28/11/2005, 17h42
  4. conversion de fichier Excel en csv ,
    Par bounette dans le forum Excel
    Réponses: 2
    Dernier message: 26/01/2005, 08h42
  5. [VBA-E] macro conversion excel vers csv
    Par baboune dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 15/07/2004, 09h23

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