[PERL] Parser un fichier excel

Résolu
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

  • Votes
  • Date
  • Date décroissante
  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
    1. 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.

      Discussions similaires

      question pix mot caché

      7 réponses