Problème Perl : win32::OLE

Fermé
Plo Koon - 11 juin 2009 à 17:18
 Plo Koon - 12 juin 2009 à 15:22
Bonjour,
Voila, je souhaite modifier un fichier CSV à l'aide de Perl.
Le problème étant que le contenue de certaines cellules est transformé en :
"Win32::OLE::Variant=SCALAR(0x327edd4)" au lieu de : "-8---B" (par exemple).
Je ne comprend vraiment pas pourquoi.
Voici mon code :

# importation des librairie
use Win32::OLE qw(in with);
use Win32::OLE::Const 'Microsoft Excel';
use strict;

# Création d'un objet OLE utilisant Excel :
my $Excel = Win32::OLE->GetActiveObject('Excel.Application') || Win32::OLE->new('Excel.Application', 'Quit');

# Ouveture du fichier à modifier
my $lecture = $Excel -> Workbooks -> Open("rm_metre.csv") || die print 'Ouverture du fichier de lecture echouée';
my $ecriture = $Excel -> Workbooks -> Open("test.csv") || die print 'Ouverture du fichier d\'écriture echouée';

# Recupération des données
#my $tableau = $lecture -> ActiveSheet -> Range("A2:E1034")->{'Value'};
my $tableau = $lecture -> ActiveSheet -> Range("A1015:E1015")->{'Value'};

my $cptLigne =2;
foreach my $ligne (@$tableau){
print "@$ligne[0] \t @$ligne[1] \t @$ligne[3] \t @$ligne[4] \n ";
}

# Pour sauvegarder le fichier :
#$ecriture -> Save () or die print "sauvegarde impossible \n";

# Pour fermer le document :
$lecture -> Close();
$ecriture -> Close();

Merci de votre aide.

Plo Koon
A voir également:

1 réponse

Bonjour,
finalement j'ai réussi à contourner le problème en n'utilisant pas le module OLE.
Pour ceux que sa intéresserai voici comment sa marche:

use strict;

my $fichier_in = "fichierDeLecture.csv";
my $fichier_out = "fichierDEcriture.csv";

# Ouverture du fichier d'entrée
if (!open(DESCR_IN, "$fichier_in")) {
print "Erreur à l'ouverture: $fichier_in\n";
exit(1);
}

# Ouverture du fichier de sortie
if (!open(DESCR_OUT, ">$fichier_out")) {
print "Erreur à l'ouverture: $fichier_out\n";
exit(1);
}


while (<DESCR_IN>) {
$ligne = $_; chomp $ligne ;

# on découpe la ligne avec ; comme séparateur
@champ = split(";",$ligne) ;
print "$champ[0] \t $champ[1] \t $champ[2] \t $champ[3] \t $champ[4] ... \n";

#traitement des données

#insere les données
print DESCR_OUT "$champ[0];$champ[1];$champ[2];$champ[3];$champ[4] ...\n" ;
}

Si quelqu'un trouve l'origine de l'erreur de mon premier script, je suis toujours preneur, juste pour comprendre.
0