Necesito estilizar ciertas celdas y filas en un archivo xls que creo a través de mi programa, pero tengo algunos problemas, posibles conceptos erróneos sobre cómo funciona el xlwt easyxf.Python xlwt: usar easyxf para estilizar celdas al escribir error
Primero, si escribo en la celda sin un valor y solo el estilo, ¿se borra el valor de adentro?
En segundo lugar, yo estoy tratando de escribir a las células utilizando el estilo y el valor de la celda, pero aparece un error:
"TypeError: 'XFStyle' object is not callable". -Solved
Ahora el problema es que los estilos no son implementadas. Después de escribir las celdas y enviarlas a un archivo xls, no hubo cambios de color, bg, tamaño, fuente.
Intenté buscar en Google esto y estaba siguiendo los ejemplos de otras personas, pero por alguna razón, mi código no funciona. Aquí está:
def stylize_spreadsheet_accordingly(iFile, workbook, row_grey, row_underline, row_font_size, cells_yellow):
#this time iFile is the file you're overwriting
#styling stuff
print "styling the document..."
new_sheet.col(0).width = 256 * 18
new_sheet.col(1).width = 256 * 69.43
new_sheet.col(2).width = 256 * 9
new_sheet.col(3).width = 256 * 20.71
new_sheet.col(4).width = 256 * 8.43
font_size_style = xlwt.easyxf('font: name Calibri, bold on, height 280;')
font_underline_style = xlwt.easyxf('font: underline on;')
fill_grey_style = xlwt.easyxf('pattern: back_color gray25;')
fill_yellow_style = xlwt.easyxf('pattern: back_color yellow;')
iBook = open_workbook(iFile)
iSheet = iBook.sheet_by_index(0)
for row_index in range(iSheet.nrows):
if row_index in row_grey:
for col_index in range(iSheet.ncols):
new_sheet.write(row_index,col_index, iSheet.cell(row_index,col_index).value, fill_grey_style)
if row_index in row_underline:
for col_index in range(iSheet.ncols):
new_sheet.write(row_index,col_index, iSheet.cell(row_index,col_index).value, font_underline_style)
if row_index in row_font_size:
for col_index in range(iSheet.ncols):
new_sheet.write(row_index,col_index, iSheet.cell(row_index,col_index).value, font_size_style)
for each in cells_yellow:
new_sheet.write(each[0], each[1], iSheet.cell(each[0],each[1]).value, fill_yellow_style)
return workbook
new_sheet
es una variable global que hice en otra función que representa la hoja añadí a mi libro xlwt. El libro de trabajo que paso, es el archivo que se supone que contiene ese new_sheet
. Puede que lo complique o lo haga de manera poco ética, pero funciona.
P.S. Si hay una manera diferente en que podría hacer esto o cambiar ciertas celdas para que tengan un color completo de una manera diferente, háganmelo saber. Una vez más, gracias.
Gracias, arreglé el código para lo que ustedes dijeron, y el TypeError desapareció, pero una vez que se completó, ninguna de las opciones de diseño que creé y usé pasó. El archivo xls todavía estaba en su formato predeterminado. ¿Cómo puede ser esto?
Gracias, pero por alguna razón, se están promulgando ninguno de mis estilos. Todo funciona, se compila y se ejecuta, pero cuando abro el documento xls, no hay cambio en la fuente o el color. Lo único que cambia son los anchos de columna. –