write workbook unmerge tutorial iter_rows instalar existing español como python openpyxl

workbook - Python: openpyxl cómo leer el color de fuente de una celda



unmerge cells openpyxl (2)

Creo que este es un error en openpyxl y creo que deberías reportarlo here .

Depurando el siguiente código (con trepan3k por supuesto):

from openpyxl import Workbook wb = Workbook() ws = wb.active c = ws[''A4''] # cell gets created here print(ws[''A4''].font.color)

Yo obtengo:

Color(rgb=Value must be type ''str'', indexed=Value must be type ''int'', auto=Value must be type ''bool'', theme=1, tint=0.0, type=''theme'')

y esto viene de _repr_ () de la clase Typed () en el archivo openpyxl/descriptors/base.py Este mensaje aparece cuando no se ha inicializado un valor. Observe que "indexado" y "automático" tampoco se han configurado.

Pero, presumiblemente, deberían haberse configurado cuando se realizó el código para el acceso de ws[''a4''] .

Nota: la ligera diferencia en el mensaje: ''str'' en lugar de ''basestring'' es probablemente atribuible al hecho de que estaba usando Python 3 o menos probable que openpyxl 2.2.3

Y si hay algún otro código adicional que debería haber agregado en mi ejemplo, al menos https://openpyxl.readthedocs.org/en/latest/index.html debería indicar eso.

Vea también el estilo de celda openpyxl que no informa correctamente donde uno de los desarrolladores parece decir lo mismo en muchas palabras.

Editar :

Un par de otras cosas pueden ser de interés para observar. Primero, puede establecer un valor y luego leerlo, por ejemplo, puede hacer esto:

c.font.color.rgb = "FF000000"

En segundo lugar, si prueba c.font.color.rgb en un booleano, parecerá que se ha establecido un valor. Es decir

if c.font.color: print("yes")

imprimirá "sí".

He intentado imprimir some_cell.font.color.rgb y obtuve varios resultados.

Para algunos obtuve lo que quiero (como " FF000000 "), pero para otros me da el Value must be type ''basetring'' . Supongo que esto último es porque en realidad no he definido el color de fuente para estas celdas.

Estoy usando openpyxl 2.2.2


Recuerdo haber buceado en la fuente de openpyxl hace un tiempo para intentar reducir algunos problemas de estilo. Si está abriendo un archivo de Excel preexistente, las celdas solo tendrán un estilo si contienen contenido. Por ejemplo, si tiene un .xlsx con A: A resaltado en amarillo, pero solo A1 contiene texto, entonces openpyxl no tendrá esa información de resaltado disponible para A2. Y si (utilizando openpyxl) graba algunos datos en A2, iniciará esa celda sin estilo, y terminará con la columna A en amarillo en todas partes excepto en A2.

La dificultad con la que me topé fue en parchear la creación de la celda para determinar si la hoja tiene un estilo que se debe mantener en base a la herencia. Si tiene un estilo A: A con borde grueso y un estilo B: B con borde fino, ¿de qué hereda usted?