|
|
|
|
Bonjour,
J'ai un dernier problème sur le travail de récupération des données d'un xls vers un csv. Il s'agit des caractères spéciaux.
Un extrait de mon fichier xls (fichier d'entrée)
SU1107 29 ACCESSOIRES ENTRETIEN 071115173 Sacs poubelle 2 nœuds 100 % biodégradable
Un extrait de mon fichier csv (fichier de sortie)
SU1107;29;ACCESSOIRES ENTRETIEN;071115173;SNULaNULcNULsNUL NULpNULoNULuNULbNULeNULlNULlNULeNUL NUL2NUL NULnSOHSNULuNULdNULs...
Le champ, dans le xls contient le caractère "œ". Et dans mon csv, il me sort la ligne du dessus. Le "NUL" est écrit en blanc sur un fond noir (je peux pas le copier/coller sur le site), et au niveau du caractère, il me le retranscrit en "SOH" (blanc sur fond noir) & "S" & "NUL" (blanc sur fond noir).
Qui sait quoi utiliser comme fonction pour récupérer le même caractère dans mon csv (dans le meilleur des cas) ou le remplacer par "oe" (dans le pire des cas), et si il existe une fonction générique pour tous les caractères spéciaux ou si il faut en faire une pour chaque caractère. Car, à l'heure actuelle, je n'ai rencontré que celui, mais il se pourrait qu'il y en ait d'autres dans le futur.
Merci d'avance de votre aide.
Configuration: Windows XP Firefox 2.0.0.7
Je viens de mettre les extraits de fichiers dans cjoint.com
|
Essaie
#!/usr/bin/perl
use strict;use warnings;
use Spreadsheet::ParseExcel;
open F,">>resultat.csv"
or die "E/S : $!\n";
my $file = "Test.xls";
#my $file = "Test.xls";
my $excel = Spreadsheet::ParseExcel::Workbook->Parse($file);
my $sheet = ${$excel->{Worksheet}}[0];
foreach my $row (0 ... 2 ){
my $cell1 = $sheet->{Cells}[$row][0];
my $cell2 = $sheet->{Cells}[$row][1];
my $cell3 = $sheet->{Cells}[$row][2];
my $cell4 = $sheet->{Cells}[$row][3];
my $cell5 = $sheet->{Cells}[$row][4];
my $res = "$cell1->{Val};$cell2->{Val};$cell3->{Val};$cell4->{Val};$cell5->{Val};";
$res =~s/\n//;
$res =~s/\x01\x53/oe/g;
print "$res\n";
}
__END__
lami20j |
Essaie
#!/usr/bin/perl
use strict;use warnings;
use Spreadsheet::ParseExcel;
open F,">>resultat.csv"
or die "E/S : $!\n";
my $file = "Test.xls";
#my $file = "Test.xls";
my $excel = Spreadsheet::ParseExcel::Workbook->Parse($file);
my $sheet = ${$excel->{Worksheet}}[0];
foreach my $row (0 ... 2 ){
my $cell1 = $sheet->{Cells}[$row][0];
my $cell2 = $sheet->{Cells}[$row][1];
my $cell3 = $sheet->{Cells}[$row][2];
my $cell4 = $sheet->{Cells}[$row][3];
my $cell5 = $sheet->{Cells}[$row][4];
my $res = "$cell1->{Val};$cell2->{Val};$cell3->{Val};$cell4->{Val};$cell5->{Val};";
$res =~s/\n//;
$res =~s/\x01\x53/oe/g;
$res =~s/\x00//g;
print "$res\n";
}
__END__
lami20j |