2012-08-16 15 views
5

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?

Respuesta

2

Obtiene el 'XFStyle' object is not callable porque lo está llamando como una función en lugar de simplemente pasarlo a sheet.write p. Ej.

en lugar de

new_sheet.write(row_index,col_index, iSheet.cell(row_index,col_index).value, fill_grey_style()) 

uso

new_sheet.write(row_index,col_index, iSheet.cell(row_index,col_index).value, fill_grey_style) 
+0

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. –

0

va a crear los estilos y luego intentar llamarlos.

Por ejemplo:

font_size_style = xlwt.easyxf('font: name Calibri, bold on, height 280;') 
... 
new_sheet.write(row_index,col_index, iSheet.cell(row_index,col_index).value, fill_grey_style()) 

Aviso este bit:

fill_grey_style() 
Cuestiones relacionadas