[PERL] Parser un fichier excel

Résolu
Houston-12 Messages postés 33 Statut Membre -  
 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.
Configuration: Windows XP
Opera 9.25

2 réponses

  1. Houston-12 Messages postés 33 Statut Membre 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
    0
  2. Caraibe
     
    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