Transformation .csv/.xls en perl
Résolu
VivoBaggio
Messages postés
140
Date d'inscription
Statut
Membre
Dernière intervention
-
zotla -
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.
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.
A voir également:
- Transformation .csv/.xls en perl
- Comment ouvrir un fichier xls? - Guide
- Xls viewer - Télécharger - Tableur
- Transformer une image en icone - Guide
- Transformer majuscule en minuscule word - Guide
- Transformer epub en kindle - Guide
6 réponses
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");
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");
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");
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");
Salut,
voici le fichier sur lequel j'ai tester, donc nombre de colonnes différent pour chaque ligne
à toi d'adapter
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#
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
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