Cómo localizar y acceder a los rangos con nombre (mundial, apel-hoja de trabajo) utilizando XLRD, Python?
-
02-10-2019 - |
Pregunta
La documentación para xlrd
aquí
http://www.python-excel.org/
menciona que ahora es posible en la versión más reciente, pero no dice cómo.
Solución
No estoy seguro de lo que en realidad se está leyendo; Acceso a XLRD rangos con nombre ha estado disponible desde hace algunos años (en la versión 0.6.0, última versión es la 0.7.1). y vino con la documentación completa ab initio
Este es el enlace de documentación XLRD que se le da en la http://www.python-excel.org/ página que usted ha mencionado . Hit PageDown dos veces y debería ver una sección titulada referencias con nombre, constantes, fórmulas y macros . Esto da una visión general y se indican las documentación de los métodos Book.name_*
y el objeto Name
, y para una secuencia de comandos de demostración.
Tenga en cuenta que esta es la versión SVN tronco de la documentación y se aplica a una versión futura; se puede mencionar un método de conveniencia adicional que no está disponible en la versión actual de lanzamiento de XLRD (que se puede obtener de PyPI ) y que incluye el archivo de la documentación pertinente.
Actualizar en respuesta a "" "Tengo este momento: someRange = book.name_map [u'somerange '] [0] y ahora quiero iterar sobre ella, los valores de agarre, obtener su dimensiones, etc. Ahora, ¿qué hago? me trataron dir (someRange) y ayuda (someRange) y no ha ayudado mucho. "" "
Lo que está llamando someRange
es una instancia de la clase Name
. Es necesario leer la documentación href="https://secure.simplistix.co.uk/svn/xlrd/trunk/xlrd/doc/xlrd.html#__init__.Name-class" rel="nofollow de esa clase . Sería de gran ayuda si fuera a leer la manifestación guión xlrdnameAPIdemo .py e intente ejecutar por encima de su archivo XLS (s). Tenga en cuenta que "conseguir sus dimensiones" precede lógicamente "iterar sobre ella, valores agarrar"; Name.area2d
el método de conveniencia puede ser lo que necesita.
Otros consejos
No es trivial y funcionó en mi caso sólo en XLS sin XLSX (probablemente porque en mi name.evaluated == 0
XLSX):
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.
Se desea limitar el número de columnas y filas de la hoja en caso de que su rango es como A:A
o 1:1
(es decir, toda la fila o columna).