Transformation .csv/.xls en perl

Résolu
VivoBaggio Messages postés 141 Statut Membre -  
 zotla -
Bonjour,

Il y a quelques temps, j'avais demandé de l'aide sur la conversion d'un fichier .xls en .csv en perl. Et j'avais réussi à faire ma conversion grâce à vous. Maintenant, je dois faire l'inverse, c'est à dire passer un fichier .csv en .xls, toujours en perl.
J'aurais aimé savoir s'il y avait besoin d'une librairie dans ce cas-ci, comme j'avais eu besoin de la librairie "Spreadsheet::ParseExcel;" pour le cas précédent.
Merci d'avance de votre aide.
Configuration: Windows XP
Firefox 2.0.0.11

6 réponses

  1. VivoBaggio Messages postés 141 Statut Membre
     
    Rebonjour,

    Donc par rapport à la question que j'ai posé, j'ai vu que je devais utiliser le module "Spreadsheet::WriteExcel;".
    Par rapport à mon projet, pour le moment, j'arrive à récupérer mes données du fichier csv et à créer mon fichier excel. Là où je bloque, c'est pour insérer mes données dans le fichier excel.
    Merci d'avance pour votre aide.

    Je vous mets mon code actuel ci-dessous :

    use strict;
    use warnings;
    use Spreadsheet::WriteExcel;

    # Information du programme
    print "Vous devez insérer le fichier texte (avec séparateur à virgule) à la racine de C: avant de continuer le lancement du programme !\n";
    print "Si vous ne l'avez pas fait, quittez le programme !\n";
    system("pause");

    # Saisie du nom du fichier d'entrée
    print "Saisissez le nom du fichier texte ! ";
    chomp(my $name_file=<stdin>);
    print "Vous avez saisi : $name_file\n";

    # Saisie de l'extension du fichier d'entrée
    print "Saisissez l'extension du fichier texte ! ";
    chomp(my $name_extension=<stdin>);
    print "Vous avez saisi : $name_extension\n";

    # Déclaration du fichier d'entrée
    # "unless" sert à détecter si le fichier existe ou non
    unless (open FILETEXT, my $file = "C:\\${name_file}.${name_extension}")
    {
    print "Fichier Texte inexistant.\nLe programme va fermer.\n";
    system("pause");
    # Fermeture du programme
    exit();
    }
    else
    {
    open FILEXLS,">C:\\${name_file}.xls";
    my $file = "C:\\${name_file}.${name_extension}";

    while(my $ligne = <FILETEXT>)
    {
    my ($numclt,$cleclt,$civclt,$nomclt) = split /;/,$ligne;
    print "$numclt\n$cleclt\n$civclt\n$nomclt\n";
    }

    # Fermeture du fichier d'entrée
    close FILETEXT;
    close FILEXLS;
    }

    system("pause");
    0
  2. VivoBaggio Messages postés 141 Statut Membre
     
    Bon, j'avance petit à petit.
    J'ai réussi à faire ce que je voulais, mais pas dynamiquement.
    C'est à dire que je sais par avance le nombre de colonne qu'il y aura dans mon fichier excel lors de sa création, car je sais à l'avance combien de valeur sont délimité dans le fichier texte.
    Moi, ce que j'aimerais rendre automatique dans ce code, c'est d'obtenir le fichier excel, sans avoir renseigné en dur dans le code le nombre de variables et donc de colonne.
    Merci de votre aide.

    Voici où en ait mon code :

    use strict;
    use warnings;
    use Spreadsheet::WriteExcel;

    # Information du programme
    print "Vous devez insérer le fichier texte (avec séparateur à virgule) à la racine de C: avant de continuer le lancement du programme !\n";
    print "Si vous ne l'avez pas fait, quittez le programme !\n";
    system("pause");

    # Saisie du nom du fichier d'entrée
    print "Saisissez le nom du fichier texte ! ";
    chomp(my $name_file=<stdin>);
    print "Vous avez saisi : $name_file\n";

    # Saisie de l'extension du fichier d'entrée
    print "Saisissez l'extension du fichier texte ! ";
    chomp(my $name_extension=<stdin>);
    print "Vous avez saisi : $name_extension\n";

    # Initialisation des variables
    my $cpt;

    # Déclaration du fichier d'entrée
    # "unless" sert à détecter si le fichier existe ou non
    unless (open FILETEXT, my $file = "C:\\${name_file}.${name_extension}")
    {
    print "Fichier Texte inexistant.\nLe programme va fermer.\n";
    system("pause");
    # Fermeture du programme
    exit();
    }
    else
    {
    my $file = "C:\\${name_file}.${name_extension}";
    # Utilisation de la librairie WriteExcel
    my $excel = Spreadsheet::WriteExcel->new("C:\\${name_file}.xls");
    my $worksheet_excel = $excel->add_worksheet("Fichier Client");
    # Parcours du fichier texte
    while(my $ligne = <FILETEXT>)
    {
    # Association des variables aux valeurs à chaque fois qu'il rencontre un ";"
    my ($var1,$var2,$var3,$var4) = split /;/,$ligne;
    # Incrémentation du compteur
    $cpt++;
    # Suppression du retour chariot dans un champ
    $var4 =~s/\n//;
    # Affichage des variables dans les colonnes correspondantes
    $worksheet_excel -> write('A'.$cpt, $var1);
    $worksheet_excel -> write('B'.$cpt, $var2);
    $worksheet_excel -> write('C'.$cpt, $var3);
    $worksheet_excel -> write('D'.$cpt, $var4);
    }
    # Fermeture du fichier d'entrée
    close FILETEXT;
    }
    system("pause");
    0
  3. VivoBaggio Messages postés 141 Statut Membre
     
    Salut à tous.

    Y-a-t-il quelqu'un pour m'aider.
    0
  4. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    voici le fichier sur lequel j'ai tester, donc nombre de colonnes différent pour chaque ligne
    à toi d'adapter
    root@debian:~/src# cat fichier.csv
    a;aa;aaa;aaaa;aaaaa;aaaaaa
    b;bb;bbb
    c;cc;ccc;cccc
    root@debian:~/src# cat ccm2.pl
    #!/usr/bin/perl
    use strict;use warnings;
    use Spreadsheet::WriteExcel;
    
    open LIRE_CSV,"fichier.csv"
        or die "E/S : $!\n";
    
    my $classeur = Spreadsheet::WriteExcel->new("perl.xls");
    my $feuille = $classeur->add_worksheet();
    
    while(<LIRE_CSV>){
            chomp;
            my @tmp = split /;/,$_;
            my $c = 0; # colonne commence à zéro
            my $r = $. - 1; # le nombre de ligne correspond au nombre de lignes de .csv -  1 (commence à zéro)
            foreach my $e(@tmp){
                    print "$r, $c, $e\n"; # affiche à l'écran ligne, colonne, valeur (pour test) - facultatif
                    $feuille->write($r,$c,$e);
                    ++$c;
            }
    }
    __END__
    root@debian:~/src#

    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. VivoBaggio Messages postés 141 Statut Membre
     
    Merci lami20j pour ton aide. Ca marche nikel.
    0
  7. zotla
     
    Je suis novice en langage C et des forums.

    je souhaiterai "lire,crée,modifier" un .TXT converti en .CSV puis .XLS
    j'ai lu et essayer de comprendre les indications si dessus mais c'est pour moi du chinois.

    fichier .txt

    a;aa;aaa;aaaa;aaaaa;aaaaaa
    b;bb;bbb
    c;cc;ccc;cccc

    fichier .CSV

    -->matrice

    je pense que un rappel des bases (bibliotec... utiliser)

    use strict; ?????????
    use warnings; ??????????
    use Spreadsheet::WriteExcel; ????????

    merci d'avance
    0