我需要对通过程序创建的xls文件中的某些单元格和行进行样式化,但是我遇到了一些问题,可能对xlwt easyxf的工作方式存在误解。
首先,如果我只写一个没有值的样式的单元格,里面的值会被擦除吗?
第二,我试图使用单元格的样式和值来写入单元格,但我不断收到错误消息:
"TypeError: 'XFStyle' object is not callable". -Solved
现在的问题是样式无法实现。写入单元格并将其输出到xls文件后,完全没有颜色,bg,大小,字体更改。
我尝试使用Google搜索,并遵循了其他人的示例,但是出于任何原因,我的代码都无法正常工作。这是:
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
是我在另一个函数中创建的全局变量,该变量表示我添加到xlwt工作簿中的工作表。我传入的工作簿是应该包含new_sheet
的文件。我可能会使其过于复杂或不道德地这样做,但是它可以工作。
P.S。如果有其他方法可以执行此操作,或者以其他方式将某些单元格更改为全色,请告诉我。再次感谢。
谢谢,我将代码固定为你们所说的,TypeError消失了,但是完成后,我创建和使用的所有样式选项都没有通过。 xls文件仍为默认格式。怎么可能?
您得到'XFStyle' object is not callable
是因为您像函数一样调用它,而不是仅仅将其传递给sheet.write
例如
代替
new_sheet.write(row_index,col_index, iSheet.cell(row_index,col_index).value, fill_grey_style())
使用
new_sheet.write(row_index,col_index, iSheet.cell(row_index,col_index).value, fill_grey_style)
您正在创建样式,然后尝试调用它们。
例如:
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())
注意这一点:
fill_grey_style()
以下代码段可能会对您有所帮助,我使用此代码将列填充为灰色
dep_style = xlwt.easyxf('font: bold on,height 200;''align: horiz left;''borders: left
thin, right thin, top thin, bottom thin')
import xlwt
pattern = xlwt.Pattern()
pattern.pattern = xlwt.Pattern.SOLID_PATTERN
pattern.pattern_fore_colour = xlwt.Style.colour_map['gray25']
dep_style.pattern = pattern
sheet1.write_merge(s2,s2,0,int(count[0])+13,dep_data['department_name'],dep_style)
以上代码为我提供了灰色行,并附加了名称。 您可以根据需要更改此代码