[Python] Buscar y obtener el valor de una celda concreta de excel

Iniciado por hsk75rv, 26 Diciembre 2016, 18:39 PM

0 Miembros y 1 Visitante están viendo este tema.

hsk75rv

Hola a todos!  :D

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:

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 (python) [Seleccionar]

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 (python) [Seleccionar]
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 (python) [Seleccionar]
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 !  :D