Longueur dynamique d'un fichier xls. en perl
Résolu
VivoBaggio
Messages postés
140
Date d'inscription
Statut
Membre
Dernière intervention
-
lami20j Messages postés 21331 Date d'inscription Statut Modérateur, Contributeur sécurité Dernière intervention -
lami20j Messages postés 21331 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
A voir également:
- Longueur dynamique d'un fichier xls. en perl
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier rar - Guide
- Fichier .dat - Guide
6 réponses
tu peux faire comme ça
Donc si la cellule de la colone 1 est vide le rang est sauté
Ca te conviens 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