2011-11-03 81 views

Respuesta

32

Aquí es una manera de manejar esto:

import xlrd 
book = xlrd.open_workbook("sample.xls", formatting_info=True) 
sheets = book.sheet_names() 
print "sheets are:", sheets 
for index, sh in enumerate(sheets): 
    sheet = book.sheet_by_index(index) 
    print "Sheet:", sheet.name 
    rows, cols = sheet.nrows, sheet.ncols 
    print "Number of rows: %s Number of cols: %s" % (rows, cols) 
    for row in range(rows): 
     for col in range(cols): 
      print "row, col is:", row+1, col+1, 
      thecell = sheet.cell(row, col)  
      # could get 'dump', 'value', 'xf_index' 
      print thecell.value, 
      xfx = sheet.cell_xf_index(row, col) 
      xf = book.xf_list[xfx] 
      bgx = xf.background.pattern_colour_index 
      print bgx 

Más información sobre la Python-Excel Google Group.

+0

El script es capaz de identificar el código de color. Pero ahora estoy recibiendo un problema diferente. La hoja de Excel que estoy analizando tiene dos celdas vacías sin formato o color extra, es decir, ambas celdas tienen fondo blanco y no hay texto adentro, en la posición - (52,4) y (9,4). En el primer caso, el color es 64 y el del otro es 9. ¿En qué se diferencia el código de color de dos tipos de células similares? – Kinjal

+0

¿Estás seguro de que no tienes un 'blank' y otro' no fill'? – JMax

+0

El índice de color 9 significa blanco a menos que se haya cambiado la paleta. 61 es un índice de color de "sistema"; lea la sección sobre índices de color cerca del comienzo de los documentos xlrd. "vacío", "blanco" y "sin texto dentro" son vagos. Cuéntanos la celda ** tipo **, valor y xf_index. Use 'repr (valor)'. Puede tener el formato predeterminado aplicado a la columna 4; ¿Qué le proporciona 'sheet.colinfo_map [4] .xf_index'? –

1

Esta función devuelve el valor de rgb del fondo de celda en tupla.

def getBGColor(book, sheet, row, col): 
    xfx = sheet.cell_xf_index(row, col) 
    xf = book.xf_list[xfx] 
    bgx = xf.background.pattern_colour_index 
    pattern_colour = book.colour_map[bgx] 

    #Actually, despite the name, the background colour is not the background colour. 
    #background_colour_index = xf.background.background_colour_index 
    #background_colour = book.colour_map[background_colour_index] 

    return pattern_colour 
Cuestiones relacionadas