[PERL] Parser un fichier excel [Résolu/Fermé]

Signaler
Messages postés
33
Date d'inscription
jeudi 18 décembre 2003
Statut
Membre
Dernière intervention
23 juin 2009
-
 Caraibe -
Bonjour,

Je souhaite parser un fichier excel jusqu'à la première ligne vide.
Pour le moment j'utilise le code suivant et je souhaite le modifier.

# !usr/perl/bin/
# Modules nécessaires
use strict;
use Win32::OLE qw(in with);
use CGI::Carp qw(fatalsToBrowser);
use Win32::OLE::Const 'Microsoft Excel';
$Win32::OLE::Warn = 3;
# Type de contenu pour le navigateur
print "Content-Type: text/html; charset=utf-8\n\n";
# Création d'une nouvelle instance du package pour Excel
my $Excel = Win32::OLE->GetActiveObject('Excel.Application') || Win32::OLE->new('Excel.Application', 'Quit');
# Ouverture du fichier Excel
my $Book = $Excel->Workbooks->Open("C:\\fiche.xls");
# Affectation du 1er classeur à la variable $Sheet
my $Sheet = $Book->Worksheets(3);
# Récupération des valeurs de toutes les cellules comprises entre F4 et J160
my $begin_cell = 'F4';
my $end_cell = 'J160';
my $array = $Sheet->Range("$begin_cell:$end_cell")->{'Value'}; # get the contents
$Book->Close;
# Affichage de ces valeurs
foreach my $ref_array (@$array) {
# Parcours de chaque ligne
foreach my $scalar (@$ref_array) {
# Parcours et affichage de chaque valeur rangées dans les colonnes de la ligne parcourue
print "$scalar ";
}
print "\n";
}



Merci pour votre aide.

2 réponses

Messages postés
33
Date d'inscription
jeudi 18 décembre 2003
Statut
Membre
Dernière intervention
23 juin 2009
1
J'ai contourné le problème en utilisant une macro excel qui va cherche la dernière ligne du tableau et qui me la renvoie dans une cellule particulière

Sub end_cell()
'
'
Range("F3").Select
Cells(23, 4) = ActiveCell.SpecialCells(xlLastCell).Row
'
End Sub
J'ai resolu ce problème en faisant cela :
Ouverture Excel
$Excel = Win32::OLE->new('Excel.Application', 'Quit');
# Invisible = 0, 1 visible
$Excel->{'Visible'} = 0;
# Aucun message d'alerte
$Excel->{DisplayAlerts} = 0;
# Ouverture fichier Excel
$Book = $Excel->Workbooks->Open($FicHabil);
# Selection de la feuille souhaitée
$Sheet_F = $Book->Worksheets("Feuil1");
# Nb lignes à traiter
$Idx = $Sheet_F->Range("A1")->End(xlDown)->{Row};
print("Idx : $Idx\n");

Voici la ligne en VBA
Idx = Range("A1").End(xlDown).Row
Pour la transformer j'ai remplacé les points par des flèches et ajouter {} sur Row

Bien cordialement.