IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

Lister les cellules nommées dans Excel en perl


Sujet :

Langage Perl

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 260
    Points : 281
    Points
    281
    Par défaut Lister les cellules nommées dans Excel en perl
    Bonjour,

    Je tente en perl de manipuler avec Win32::OLE un fichier excel.
    Il me faut la liste de toutes les cellules nommées du fichier.

    Sous OOCalc par exemple je suis allé taper (pas avec win32:OLE) dans le fichier content.xml et j'ai lu le contenu de la balise <table:named-expressions>.

    Mais je ne sais comment faire avec Excel.
    J'arrive bien à lire une cellule nommée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $ls_valeur = $lo_feuille->Range("NOM_R031")->{'Value'};
    print ("ls_valeur : [$ls_valeur]\n");
    Mais je ne sais lister toutes les cellules nommées (dans mon cas de NOM_R031 à NOM_R080 par exemple).
    Je ne cherche pas à obtenir le contenu de cellules dont je connais le nom mais à obtenir la liste des noms créés pour des cellules de mon document.

    Une idée ?
    Pozzo

  2. #2
    Membre actif

    Profil pro
    Inscrit en
    Août 2009
    Messages
    156
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 156
    Points : 211
    Points
    211
    Par défaut
    La notion d'"Enum" du package Win32::OLE ne correspond pas à ton besoin ?

    http://search.cpan.org/~jdb/Win32-OL...32/OLE/Enum.pm


    Sinon ce module là est ptêt plus complet:
    http://search.cpan.org/~jmcnamara/Sp...rseExcel-0.54/

    Bon courage. :-(

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 260
    Points : 281
    Points
    281
    Par défaut
    Salut,

    Merci de ta réponse.

    Spreadsheet ParseExcel est limité à la lecture et il me faut ouvir le fichier en lecture / écriture. Ca m'ennuie bien mais je vais être obligé de rester avec OLE ce qui m'impose si je ne me trompe d'installer Excel (ce que j'aurais voulu éviter car je suis sur un serveur).

    Je suis allé sur OLE:Enum et suivant le lien et je vois mal comment l'utiliser dans mon cas.
    On peut en effet créer des énumérations sur des collections. L'exemple dans le lien montre une énumération de feuilles. Il faut donc savoir quel type de collection on veut énumérer.

    Il faudrait pouvoir dire que je veux énumérer la collection des cellules "nommées". Ce que je ne sais pas formuler.

    Pour le moment je ne vois comme solution que parcourir toutes les cellules de toutes les feuilles dans une plage bornée (ex A1 à V100 dans mon cas) et vérifier pour chaque cellule si elle est nommée.

    A moins que quelqu'un ne voie mieux ?
    A+ je dirai ce que j'ai pu faire au final.

    Pozzo

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 260
    Points : 281
    Points
    281
    Par défaut Solution des jeux avec ou sans enum
    Bonjour,

    Finalement en tâtonnant / bouquinant ça a fini par marcher.
    Pour avoir la liste des noms attribués aux cellules d'un fichier excel j'ai fait comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    # Ouverture du fichier Excel
    $lf_document = $Excel->Workbooks->Open("mon_fic.xls"); 
     
    # Enumération des noms du document en utilisant Enum
    my $lt_noms = new Win32::OLE::Enum($lf_document->Names());
    while (defined ($lo_nom = $lt_noms->Next())) {
      my $ls_nom = $lo_nom->Name();
      my $ls_ref = $lo_nom->Value();
      print ("Nom $ls_nom designe $ls_ref\n");
    }
    Merci de la piste 50nio ça m'a aidé.

    Et comme le dit la doc Enum : "Note that correctly implemented collection objects must support the Count and Item methods, so creating an enumerator is not always necessary."

    Donc une version alternative avec count et item :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    # Ouverture du fichier Excel
    $lf_document = $Excel->Workbooks->Open("mon_fic.xls"); 
     
    # Lecture des noms définis pour le fichier
    my $lt_refs = $lf_document->Names();
    my $ln_comptage = $lt_refs->count;
    print ("ln_comptage : $ln_comptage\n");
    for (my $ln_compteur=1; $ln_compteur<= $ln_comptage; $ln_compteur++) {
      my $ls_ref = $lt_refs->item($ln_compteur)->Value;
      my $ls_nom = $lt_refs->item($ln_compteur)->Name;
      print ("ls_ref [$ln_compteur]:  $ls_ref a pour nom $ls_nom\n");
    }
    Il est content le Pozzo.
    A+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2010] Marcro: Copier seulement les cellules visibles dans un nouveau classeur Excel
    Par Samexcel dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/02/2015, 16h35
  2. [AC-2007] importer les cellules selectionnées dans excel
    Par Tierisa dans le forum VBA Access
    Réponses: 8
    Dernier message: 10/09/2013, 08h28
  3. Réponses: 2
    Dernier message: 25/03/2013, 17h07
  4. Réponses: 2
    Dernier message: 03/05/2006, 15h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo