Comment localiser et accéder à des plages nommées (mondiale, par e-feuille) en utilisant xlrd, Python?

StackOverflow https://stackoverflow.com/questions/3163073

Question

La documentation xlrd ici http://www.python-excel.org/ mentionne qu'il est désormais possible dans la dernière version, mais ne dit pas comment.

Était-ce utile?

La solution

Je ne sais pas ce que vous lisez en fait; l'accès xlrd aux plages nommées est disponible depuis quelques années (dans la version 0.6.0, dernière version est 0.7.1). et est venu avec une documentation complète ab initio

Ceci est le lien de la documentation xlrd qui est donnée sur le http://www.python-excel.org/ que vous avez mentionné . Hit PageDown deux fois et vous devriez voir une section intitulée références nommées, des constantes, des formules et macros . Cela donne une vue d'ensemble et les points que vous à la documentation des méthodes de Book.name_* et l'objet Name et à un script de démonstration.

Notez que ceci est la version du tronc SVN de la documentation et applique un communiqué de l'avenir; il peut mentionner une méthode pratique supplémentaire qui n'est pas disponible dans la version publiée actuelle de xlrd (que vous pouvez obtenir de PyPI ) et qui comprend le fichier de la documentation pertinente.

Mise à jour en réponse à "" "Je suis arrivé jusqu'ici: someRange = book.name_map [u'somerange '] [0] et maintenant je veux itérer dessus, les valeurs d'appui, obtenir son dimensions, etc. maintenant, que dois-je faire? J'essayé dir (someRange) et aide (someRange) et il n'a pas beaucoup aidé. "" "

Ce que vous appelez someRange est une instance de la classe Name. Vous devez lire le documentation de cette de classe. Il serait utile que vous lisiez le script démonstration xlrdnameAPIdemo .py et essayer en cours d'exécution sur votre fichier xls (s). Notez que « obtenir ses dimensions » précède logiquement « itérer dessus, les valeurs d'appui »; la méthode pratique Name.area2d peut-être ce dont vous avez besoin.

Autres conseils

Il est pas trivial et cela a fonctionné dans mon cas seulement sur XLS pas XLSX (probablement parce que sur mon XLSX name.evaluated == 0):

name = book.name_map['my_named_range'][0]
assert name.result.kind == xlrd.oREF
ref3d = name.result.value[0]
for sheet_index in range(ref3d.shtxlo, ref3d.shtxhi):
    sheet = book.sheet_by_index(sheet_index)
    for row in range(ref3d.rowxlo, min(ref3d.rowxhi, sheet.nrows)):
        for col in range(ref3d.colxlo, min(ref3d.colxhi, sheet.ncols)):
            cell = sheet.cell(row, col)
            # TODO: Do something with that cell.

Vous voulez limiter le nombre de colonnes et de lignes dans la feuille dans le cas où votre gamme est comme A:A ou 1:1 (à savoir, toute la ligne ou la colonne).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top