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

Langage PHP Discussion :

PHPEXcel - CSV - Format de date


Sujet :

Langage PHP

  1. #1
    Pgs
    Pgs est déconnecté
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    482
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 482
    Par défaut PHPEXcel - CSV - Format de date
    Bonjour,

    La commande PHPExcel_IOFactory::createWriter($objPHPExcel, 'CSV') génère un fichier dans lequel les date au format jj/mm/aaaa sont converties en nombre (par exemple 42644).
    Comment faire pour que les données soient conservées au format d'affichage ?

    Merci

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Essaie en ajoutant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $reader = $objPHPExcel_IOFactory::createWriter($objPHPExcel, 'CSV')
    $reader->setReadDataOnly(false);
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Pgs
    Pgs est déconnecté
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    482
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 482
    Par défaut
    Merci !!
    Par contre, c'est curieux :
    07/11/2014
    14/11/2014
    03/11/2014


    devient :
    "11/7/2014";
    "11/14/2014";
    "11/3/2014";

    on dirait qu'il est passé au format américain...

  4. #4
    Pgs
    Pgs est déconnecté
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    482
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 482
    Par défaut
    J'ai trouvé :

    $objPHPExcel = $objReader->load($infile);
    $objPHPExcel->getActiveSheet()->getStyle('A1:A'.$objPHPExcel->getActiveSheet()->getHighestRow())->getNumberFormat()->setFormatCode('dd/mm/yyyy');
    $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'CSV');

  5. #5
    Membre à l'essai
    Homme Profil pro
    Infographiste
    Inscrit en
    Juillet 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : Infographiste
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juillet 2012
    Messages : 6
    Par défaut
    Bonsoir à tous,
    Il y a bien longtemps que je n'étais plus venu sur ce forum et je me permet de rouvrir cette discussion.
    je pense rencontrer le même problème, mais comme j'utilise la PHPExcel que depuis 2 jours, je ne maîtrise pas grand chose.
    Quand j'importe le xlsx pour le convertir en .csv, j'ai deux colonnes qui transforment les dates, je perds tous les "0" et j'ai ..... par exemple ..
    18/01/17 20:00 --->devient --->1/18/17 20:00
    19/01/17 18:00 --->devient --->1/19/17 18:00
    07/01/17 17:44 --->devient --->1/7/17 17:44

    pour importer mon csv en SQL je voudrais au moins obtenir 01/18/17 ou mieux 2017-01-18 qui serait l'idéal pour la suite de mes requêtes.
    Je pense que la solution est dans cette discussion mais comment l'adapter.

    merci d'avance
    @+

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Ton résultat tu le vois dans un editeur de texte ou dans excel ?

    Mais je ne pense pas qu'il existe un SGDB qui exige qui exige un 0 devant les numéros de mois ou du jour.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre à l'essai
    Homme Profil pro
    Infographiste
    Inscrit en
    Juillet 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : Infographiste
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juillet 2012
    Messages : 6
    Par défaut
    j'ai essayé les deux, mais des que j'ouvre le csv, il manque les"0" et dans l'import vers mySQL c'est pareil.
    En fait je converti un .xlsx en .csv (avec PHPExcel) que j'importe ensuite dans ma table .

    Merci de ton aide précieuse....

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Comment ça tu as essayé les deux ?
    Quand ton ouvres le CSV dans un editeur de texte, comment est la date ?

    Concernant Mysql une date ne peut pas être mal formatée dedans, ou alors c'est qu'elle n'est pas dans une colonne DATE.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Membre à l'essai
    Homme Profil pro
    Infographiste
    Inscrit en
    Juillet 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : Infographiste
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juillet 2012
    Messages : 6
    Par défaut
    quand j'ouvre mon CSV
    avec excel ma colonne s'affiche ----> ,"1/18/17 20:00",
    avec text edit ---> ,"1/18/17 20:00", c'est pareil
    dans MySQL ---> 1/18/17 20:00 ma COL est en varchar car si je met DATE j'ai 0000-00-00

  10. #10
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Bon déjà c'est bien DATE ou DATETIME qu'il faut.
    Ensuite tu as essayé la solution de Infograph61 pour forcer le format y-m-d ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  11. #11
    Membre à l'essai
    Homme Profil pro
    Infographiste
    Inscrit en
    Juillet 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : Infographiste
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juillet 2012
    Messages : 6
    Par défaut
    si tu parles de ça ..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $objPHPExcel = $objReader->load($infile);
    $objPHPExcel->getActiveSheet()->getStyle('A1:A'.$objPHPExcel->getActiveSheet()->getHighestRow())->getNumberFormat()->setFormatCode('dd/mm/yyyy');
    $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'CSV');
    je l'ai mis tel quel dans mon script Php de conversion xlsx->csv et il plante dès le départ.

    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    <?php
    $fichierIN = '/Applications/MAMP/htdocs/soplanning2017/www/morerecent/Classeur1.xlsx';
    $fichierOUT = '/Applications/MAMP/htdocs/soplanning2017/www/morerecent/Classeur1.csv';
     
    $phpXlFile = '/Applications/MAMP/htdocs/soplanning2017/www/morerecent/Classes/PHPExcel.php';
    $phpXLfactory = '/Applications/MAMP/htdocs/soplanning2017/www/morerecent/Classes/PHPExcel/IOFactory.php';
     
    if( !file_exists($phpXlFile)){
     echo "<br> Erreur : Fichier  $phpXlFile introuvable";
     exit();
    } 
    if( !file_exists($phpXLfactory)){
     echo "<br> Erreur : Fichier  $phpXLfactory introuvable";
     exit();
    } 
    require_once $phpXlFile;
    require_once $phpXLfactory;
     
     
    if( !file_exists($fichierIN)){
     echo "<br> Erreur : Fichier  $fichierIN introuvable";
     exit();
    } 
     
     
     
    try {
        $inputFileType = PHPExcel_IOFactory::identify($fichierIN);
        $objReader = PHPExcel_IOFactory::createReader($inputFileType);
        $objPHPExcel = $objReader->load($fichierIN);
     
    		$objWriter = new PHPExcel_Writer_CSV($objPHPExcel);
     
    		//$objWriter->save('C:/wamp/www/Supply/soplanningadmin/www/morerecent/Classeur1.csv');
    		$objWriter->save('/Applications/MAMP/htdocs/soplanning2017/www/morerecent/Classeur1.csv');
    		echo 'File saved to csv format <br>';
     
    } catch(Exception $e) {
        die('Error loading file "'.pathinfo($fichierIN,PATHINFO_BASENAME).'": '.$e->getMessage());
    }
    ?>

  12. #12
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    C'est à dire plante ? Tu obtiens quoi exactement ?

    Tu as bien remarqué que seul la deuxième ligne concerne la conversion de la date.
    Les deux autres lignes sont déjà dans ton script. Il faut seulement mettre cette ligne après ton "load" à toi.
    De plus tu as bien du voir que sur cette deuxième ligne, tu dois mettre le format de sortie yyyy-mm-dd au lieu de dd/mm/yyyy
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  13. #13
    Membre à l'essai
    Homme Profil pro
    Infographiste
    Inscrit en
    Juillet 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : Infographiste
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juillet 2012
    Messages : 6
    Par défaut
    J'avais une page blanche ...
    en mettant la ligne après load, cela fonctionne de nouveau mais le format de m date est toujours le même.

    par il faut surement que je change quelque chose au niveau "('A1:A'.->..."
    $objPHPExcel->getActiveSheet()->getStyle('A1:A'.$objPHPExcel->getActiveSheet()->getHighestRow())->getNumberFormat()->setFormatCode('yyyy-mm-dd');

  14. #14
    Membre à l'essai
    Homme Profil pro
    Infographiste
    Inscrit en
    Juillet 2012
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Orne (Basse Normandie)

    Informations professionnelles :
    Activité : Infographiste
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Juillet 2012
    Messages : 6
    Par défaut
    Bonjour tous,
    il m'a suffit de mettre la ligne au bon endroit, en indiquant les bonnes COL, et le code fonctionne parfaitement.
    Merci beaucoup à toi Sabotage pour ton aide précieuse et aussi a "PGS " pour sa solution.
    Bon week-end...@+

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

Discussions similaires

  1. [MySQL] transformer un format de date venant d'un csv
    Par albinszten dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 26/02/2010, 19h55
  2. Format de date sous import CSV
    Par SOLEIL1962 dans le forum Access
    Réponses: 3
    Dernier message: 14/09/2008, 22h14
  3. Format de Date après ouverture en CSV
    Par nono le golfeur dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 07/07/2008, 18h27
  4. Réponses: 4
    Dernier message: 15/01/2007, 11h53
  5. [Excel] Import .csv et format de date
    Par davlefabuleux dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 25/09/2006, 20h06

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