Pb Excel / Csv Perl
Résolu/Fermé
VivoBaggio
Messages postés
140
Date d'inscription
jeudi 27 octobre 2005
Statut
Membre
Dernière intervention
23 janvier 2009
-
1 oct. 2007 à 17:44
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 3 oct. 2007 à 18:21
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 - 3 oct. 2007 à 18:21
A voir également:
- Pb Excel / Csv Perl
- Liste déroulante excel - Guide
- Si et excel - Guide
- Word et excel gratuit - Guide
- Aller à la ligne excel - Guide
- Déplacer une colonne excel - Guide
10 réponses
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
1 oct. 2007 à 20:12
1 oct. 2007 à 20:12
Salut,
essaie
essaie
#!C:/Perl/bin/perl.exe use strict; use Spreadsheet::ParseExcel; use Spreadsheet::WriteExcel; use Win32::OLE qw(in with); use Win32::OLE::Const 'Microsoft Excel'; my $excel_in = Win32::OLE->GetActiveObject('Excel.Application') || Win32::OLE->new('Excel.Application', 'Quit'); my $book = $excel_in->Workbooks->Open("C:\\Clients\\Systeme_U\\marketing_distinctif\\produits_SU1107.xls"); my $sheet = $book->Worksheets(1); my $array1 = $sheet->Range("A3:A167" )->{'Value'}; my $array2 = $sheet->Range("B3:B167" )->{'Value'}; my $sheet2 = $book->Worksheet(2); $book->Close; my $fichier= "C:\\Clients\\Systeme_U\\marketing_distinctif\\produits_SU1107.csv"; open F, ">>$fichier"; # ouverture en ajout dans un fichier existant my @x = split " ", join " ",map { split } @$array1; my @y = split " ", join " ",map { split } @$array2; print F "$x[$_];$y[$_]\n" for (0..$#x) close F; print "File Completed\n"; system("pause"); __END__
VivoBaggio
Messages postés
140
Date d'inscription
jeudi 27 octobre 2005
Statut
Membre
Dernière intervention
23 janvier 2009
2 oct. 2007 à 10:20
2 oct. 2007 à 10:20
J'aimerais savoir ce que tu as mis dans ton FOR car comme je débute en perl, je comprends pas ta syntaxe.
"print F "$x[$_];$y[$_]\n" for (0..$#x)"
Parcequ' avec ton code, le programme se lance, se termine, sans me créer mon csv.
"print F "$x[$_];$y[$_]\n" for (0..$#x)"
Parcequ' avec ton code, le programme se lance, se termine, sans me créer mon csv.
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
2 oct. 2007 à 10:37
2 oct. 2007 à 10:37
Et mois j'ai besoin que tu m'envoies ton fichier excel pour tester.
Je n'aime pas travailler à l'aveugle.
mets ce code dans un fichier script.pl
Je n'aime pas travailler à l'aveugle.
mets ce code dans un fichier script.pl
#!C:/Perl/bin/perl.exe use strict; use Spreadsheet::ParseExcel; use Spreadsheet::WriteExcel; use Win32::OLE qw(in with); use Win32::OLE::Const 'Microsoft Excel'; my $excel_in = Win32::OLE->GetActiveObject('Excel.Application') || Win32::OLE->new('Excel.Application', 'Quit'); my $book = $excel_in->Workbooks->Open("C:\\Clients\\Systeme_U\\marketing_distinctif\\produits_SU1107.xls"); my $sheet = $book->Worksheets(1); my $array1 = $sheet->Range("A3:A167" )->{'Value'}; my $array2 = $sheet->Range("B3:B167" )->{'Value'}; my $sheet2 = $book->Worksheet(2); $book->Close; for (@$array1){ print "-$_\n";} for (@$array2){ print "=$_\n";} __END__execute ensuite le fichier avec la commande
perl script.pl > c:\resultat.txtet mets le fichier resultat.txt sur cjoint.com
VivoBaggio
Messages postés
140
Date d'inscription
jeudi 27 octobre 2005
Statut
Membre
Dernière intervention
23 janvier 2009
2 oct. 2007 à 16:20
2 oct. 2007 à 16:20
Je vais avoir du mal avec ton dernier code à te passer un fichier de sortie car il n'en crée pas, vu qu'il n'y a pas de code concernant la sortie. Donc j'insère le mien pour avoir une sortie, et là il ne me retranscrit rien. Mon csv est vide. Mais là n'est pas le soucis.
Sinon par rapport à ton code, tes 2 print me ressortent bien dans le fenetre dos les 165 info de chaque colonne.
Là où est le problème, c'est que je dois récupérer tes 2 print en un seul, 165 fois et non 165 x le nombre de colonnes. Et par rapport à mon code de départ, il me récupérait bien le print avec les 2 valeurs mais un nombre conséquent de fois.
Donc j'ai changé ton code pour essayer quelquechose
1er test
for (@$array1){ for (@$array2){ } }
print "$array1;$array2\n";
Il me récupère les 2 valeurs du print, mais qu'une fois (normal, je suis en dehors des 2 boucles)
2e test
for (@$array1){ for (@$array2){
print "$array1;$array2\n";
} }
Il me récupère les valeurs mais un nombre conséquent de fois (et là, ca m'emmerde. Retour à la case départ)
Comment faire pour récupérer les valeurs un nombre de fois égal aux nombre de lignes d'une colonne dans mon fichier excel (165 dans mon cas) ? Où le boucler ?
Sinon par rapport à ton code, tes 2 print me ressortent bien dans le fenetre dos les 165 info de chaque colonne.
Là où est le problème, c'est que je dois récupérer tes 2 print en un seul, 165 fois et non 165 x le nombre de colonnes. Et par rapport à mon code de départ, il me récupérait bien le print avec les 2 valeurs mais un nombre conséquent de fois.
Donc j'ai changé ton code pour essayer quelquechose
1er test
for (@$array1){ for (@$array2){ } }
print "$array1;$array2\n";
Il me récupère les 2 valeurs du print, mais qu'une fois (normal, je suis en dehors des 2 boucles)
2e test
for (@$array1){ for (@$array2){
print "$array1;$array2\n";
} }
Il me récupère les valeurs mais un nombre conséquent de fois (et là, ca m'emmerde. Retour à la case départ)
Comment faire pour récupérer les valeurs un nombre de fois égal aux nombre de lignes d'une colonne dans mon fichier excel (165 dans mon cas) ? Où le boucler ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
2 oct. 2007 à 16:34
2 oct. 2007 à 16:34
Je vais avoir du mal avec ton dernier code à te passer un fichier de sortie car il n'en crée pas, vu qu'il n'y a pas de code concernant la sortie.
Ce n'est pas le code qui créer le fichier mets la commande que tu dois taper en DOS
perl script.pl > c:\resultat.txt
Comme je vois que tu n'as pas compris alors execute celui là et passe moi le fichier.
Mon code et fonctionnel. En revanche ça depends de ce que les cellules contiennent.
Si tu ne peux pas me dire, je ne pourrai pas t'aider.
Ce n'est pas le code qui créer le fichier mets la commande que tu dois taper en DOS
perl script.pl > c:\resultat.txt
Comme je vois que tu n'as pas compris alors execute celui là et passe moi le fichier.
#!C:/Perl/bin/perl.exe use strict; use Spreadsheet::ParseExcel; use Spreadsheet::WriteExcel; use Win32::OLE qw(in with); use Win32::OLE::Const 'Microsoft Excel'; my $excel_in = Win32::OLE->GetActiveObject('Excel.Application') || Win32::OLE->new('Excel.Application', 'Quit'); my $book = $excel_in->Workbooks->Open("C:\\Clients\\Systeme_U\\marketing_distinctif\\produits_SU1107.xls"); my $sheet = $book->Worksheets(1); my $array1 = $sheet->Range("A3:A167" )->{'Value'}; my $array2 = $sheet->Range("B3:B167" )->{'Value'}; my $sheet2 = $book->Worksheet(2); $book->Close; open F,">>c:\resultat.txt" or die "E/S : $!\n"; for (@$array1){ print F "-$_\n";} for (@$array2){ print F "=$_\n";} __END__J'attends ton retour
Mon code et fonctionnel. En revanche ça depends de ce que les cellules contiennent.
Si tu ne peux pas me dire, je ne pourrai pas t'aider.
VivoBaggio
Messages postés
140
Date d'inscription
jeudi 27 octobre 2005
Statut
Membre
Dernière intervention
23 janvier 2009
2 oct. 2007 à 17:20
2 oct. 2007 à 17:20
https://www.cjoint.com/?kcrtrZOsQV pour le fichier .xls
https://www.cjoint.com/?kcruenriYZ pour le résultat.txt
https://www.cjoint.com/?kcruenriYZ pour le résultat.txt
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
2 oct. 2007 à 22:39
2 oct. 2007 à 22:39
#!C:/Perl/bin/perl.exe use strict; use Spreadsheet::ParseExcel; use Spreadsheet::WriteExcel; use Win32::OLE qw(in with); use Win32::OLE::Const 'Microsoft Excel'; my $excel_in = Win32::OLE->GetActiveObject('Excel.Application') || Win32::OLE->new('Excel.Application', 'Quit'); my $book = $excel_in->Workbooks->Open("C:\\Clients\\Systeme_U\\marketing_distinctif\\produits_SU1107.xls"); my $sheet = $book->Worksheets(1); my $array1 = $sheet->Range("A3:A167" )->{'Value'}; my $array2 = $sheet->Range("B3:B167" )->{'Value'}; my $sheet2 = $book->Worksheet(2); $book->Close; open F,">>c:\resultat2.txt" or die "E/S : $!\n"; for (@$array1){ print F "-@$_\n";} for (@$array2){ print F "=@$_\n";}exécute et mets aussi le fichier resultat2txt sur cjoint.com
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
2 oct. 2007 à 23:18
2 oct. 2007 à 23:18
#!C:/Perl/bin/perl.exe use strict;use warnings; use Spreadsheet::ParseExcel; open F,">>c:\resultat.csv" or die "E/S : $!\n"; my $file = "C:\\Clients\\Systeme_U\\marketing_distinctif\\produits_SU1107.xls"; my $excel = Spreadsheet::ParseExcel::Workbook->Parse($file); my $sheet = ${$excel->{Worksheet}}[0]; foreach my $row (2 ... 166) { my $cell1 = $sheet->{Cells}[$row][0]; my $cell2 = $sheet->{Cells}[$row][1]; print F "$cell1->{Val};$cell2->{Val}\n"; } __END__--
lami20j
VivoBaggio
Messages postés
140
Date d'inscription
jeudi 27 octobre 2005
Statut
Membre
Dernière intervention
23 janvier 2009
3 oct. 2007 à 17:19
3 oct. 2007 à 17:19
Tu as modifié mon code d'origine, mais tu as réussi à me le faire marcher. J'achète. Merci de ton aide.
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
3 oct. 2007 à 18:21
3 oct. 2007 à 18:21
J'achète.
c'est gratuit ;-)
de rien :-)
c'est gratuit ;-)
de rien :-)