[PERL] Parser un fichier excel

Résolu/Fermé
Houston-12 Messages postés 33 Date d'inscription jeudi 18 décembre 2003 Statut Membre Dernière intervention 23 juin 2009 - 4 févr. 2008 à 16:35
 Caraibe - 13 avril 2008 à 09:51
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.
A voir également:

2 réponses

Houston-12 Messages postés 33 Date d'inscription jeudi 18 décembre 2003 Statut Membre Dernière intervention 23 juin 2009 1
7 févr. 2008 à 15:28
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
0
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.
0