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:
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
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:
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:
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+