Longueur dynamique d'un fichier xls. en perl
Résolu
VivoBaggio
Messages postés
141
Statut
Membre
-
lami20j Messages postés 21506 Date d'inscription Statut Modérateur, Contributeur sécurité Dernière intervention -
lami20j Messages postés 21506 Date d'inscription Statut Modérateur, Contributeur sécurité Dernière intervention -
Bonjour,
J'ai un fichier excel et je dois le parcourir pour ensuite créer un csv. Pour le parcourir, j'utilise un pour ... fin pour. Mais les valeurs que j'y donne ne sont pas dynamique.
ex : foreach my $row (1 ... 166)
{
...
...
}
J'aimerais qu'il parcoure le fichier jusqu'à qu'il rencontre une ligne blanche. Dans mon cas, la ligne blanche est la 167 - 1 = 166.
Comment faire ? Merci
J'ai un fichier excel et je dois le parcourir pour ensuite créer un csv. Pour le parcourir, j'utilise un pour ... fin pour. Mais les valeurs que j'y donne ne sont pas dynamique.
ex : foreach my $row (1 ... 166)
{
...
...
}
J'aimerais qu'il parcoure le fichier jusqu'à qu'il rencontre une ligne blanche. Dans mon cas, la ligne blanche est la 167 - 1 = 166.
Comment faire ? Merci
Configuration: Windows XP Firefox 2.0.0.7
6 réponses
-
-
Salut,
Allez, svp de l'aide. Merci
Encore toi?!!! ;-))
Je vais jeter un coup d'oeil :-)
-
tu peux faire comme ça
#!/usr/bin/perl use strict;use warnings; use Spreadsheet::ParseExcel; open F,">>resultat.csv" or die "E/S : $!\n"; #my $file = "keo4cUWzZ8_Test.xls"; my $file = "kflrssGMyz_Test.xls"; #my $file = "Test.xls"; my $excel = Spreadsheet::ParseExcel::Workbook->Parse($file); my $sheet = ${$excel->{Worksheet}}[0]; foreach my $row (0 ... 65535){ next unless my $cell1 = $sheet->{Cells}[$row][0]; my $cell2 = $sheet->{Cells}[$row][1]; my $cell3 = $sheet->{Cells}[$row][2]; my $cell4 = $sheet->{Cells}[$row][3]; $cell4->{Val} =~s/[()]//g; $cell4->{Val} =~s/\D//g; $cell4->{Val} =~s/(?<=\d)(?=\d)/,/g; # my $cell5 = $sheet->{Cells}[$row][4]; # my $res = "$cell1->{Val};$cell2->{Val};$cell3->{Val};$cell4->{Val};$cell5->{Val};"; my $res = "$cell1->{Val};$cell2->{Val};$cell3->{Val};$cell4->{Val};"; $res =~s/\n//; $res =~s/\x01\x53/oe/g; $res =~s/\x00//g; print "$res\n"; } __END__
Donc si la cellule de la colone 1 est vide le rang est sauté
Ca te conviens comme ça? -
ou
#!/usr/bin/perl use strict;use warnings; use Spreadsheet::ParseExcel; my $nbligne; open F,">>resultat.csv" or die "E/S : $!\n"; my $file = "kflrssGMyz_Test.xls"; my $excel = Spreadsheet::ParseExcel::Workbook->Parse($file); my $sheet = ${$excel->{Worksheet}}[0]; foreach my $row (0 ... eof){ $nbligne++ if my $cell1 = $sheet->{Cells}[$row][0]; } foreach my $row (0 ... $nbligne){ my $cell1 = $sheet->{Cells}[$row][0]; my $cell2 = $sheet->{Cells}[$row][1]; my $cell3 = $sheet->{Cells}[$row][2]; my $cell4 = $sheet->{Cells}[$row][3]; $cell4->{Val} =~s/[()]//g; $cell4->{Val} =~s/\D//g; $cell4->{Val} =~s/(?<=\d)(?=\d)/,/g; # my $cell5 = $sheet->{Cells}[$row][4]; # my $res = "$cell1->{Val};$cell2->{Val};$cell3->{Val};$cell4->{Val};$cell5->{Val};"; my $res = "$cell1->{Val};$cell2->{Val};$cell3->{Val};$cell4->{Val};"; $res =~s/\n//; $res =~s/\x01\x53/oe/g; $res =~s/\x00//g; print "$res\n"; } __END__ -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
Ouais encore moi, lol.
J'ai pris ta solution 2 qui marche presque. A la place de eof dans ta boucle, j'ai rentré 65535, sinon il ne m'écrivait que les 2 premières lignes dans le csv.
Bon ben encore merci de ton aide. La prochaine fois, je te joins directement. Lol. -
je te joins directement. Lol
tu peux toujours demander ici, ainsi la communauté peut profiter de la solution ;-))