A continuación quiero compartir con vosotros un sencillo script que he hecho para obtener el valor de una determinada celda que sabemos que está en un archivo Excel pero que no sabemos su posición.
Imaginemos que tenemos un archivo Excel con productos que tenemos en una tienda.
A la vez, imaginemos que su estructura es del tipo:
Código:
PRODUCTO PRECIO DISPONIBLE
HP 1500 SI
CANON 300 NO
MACBOOK 2000 SI
Si quisiéramos por ejemplo buscar el producto HP que suponemos que está en el excel y, si
sabemos además que para cada producto tenemos 3 columnas que indican, a parte del PRODUCTO en sí, el PRECIO y si está o no DISPONIBLE podemos usar el siguiente script:
Código
from xlrd import open_workbook,XL_CELL_TEXT from xlrd.sheet import ctype_text import re def xls_KeyValue(file, row_KeySeacrh, col_KeySearch): pos_RowSearch = None pos_ColSearch = None wb = open_workbook(file, 'rb') sh = wb.sheet_by_index(0) row_KeySeacrh = re.compile(row_KeySeacrh) col_KeySearch = re.compile(col_KeySearch) for rows in range(sh.nrows): rows_int = rows # Stores the number of row where row_KeySearch will match rows = str(sh.row(rows)) if (row_KeySeacrh.search(rows)): pos_RowSearch = rows_int for cols in range(sh.ncols): cols_int = cols # Stores the number of col cols = str(sh.col(cols)) if col_KeySearch.search(cols): pos_ColSearch = cols_int return((sh.cell(pos_RowSearch, pos_ColSearch))) else: continue else: continue
Para hacer uso de la función lo haríamos así:
Código
print(xls_KeyValue(file,'HP','DISPONIBLE'))
El primer parámetro de la función es el archivo EXCEL (xls) que queremos analizar; el segundo argumento, row_KeySeacrh le indica a la función la fila en la cual está el dato o producto del cual queremos obtener su valor correspondiente de excel y, col_KeySearch indica la columna en la cual está el valor o, el estado del producto que indicamos en row_KeySeacrh.
Así pues,
Código
print(xls_KeyValue(file,'HP','DISPONIBLE'))
daría como resultado 'text:SI' (puesto que el PRODUCTO HP, el valor de la columna DISPONIBLE para ese producto es SI).
Espero que el código os sirva y sobretodo, me gustaría saber cómo hacerlo más legible o más entendible o si es óptimo u no (habría que parsear la salida porque aparecen elementos que son propios de cómo el módulo xlrd trabaja).
Gracias !