解决方案
对于设置样式的函数:
def define_style():font = xlwt.Font()font.colour_index = 1# 初始化样式my_style = xlwt.XFStyle()my_style.font = font # 设置字体return my_style
写入数据时,不要使用sheet.write(0, 0, '数据', define_style())
这种方式,改为:
mystyle = define_style() # 把样式函数赋值sheet.write(0, 0, '数据', mystyle) # 在写入数据时不调用函数,而是传入值
例子分析
如下代码会报错
import xlwtdef define_style():font = xlwt.Font()font.colour_index = 1# 初始化样式my_style = xlwt.XFStyle()my_style.font = font # 设置字体return my_styleif __name__ == '__main__':book = xlwt.Workbook(encoding='utf-8')sheet = book.add_sheet('sheet1', cell_overwrite_ok=True)# mystyle = define_style()for i in range(10000):sheet.write(i, 0, u'(0,0)', define_style()) # 注意这里的 define_style() !!!!!!!book.save('my_excel.xlsx')
修改main函数
里的局部为:
mystyle = define_style()for i in range(10000):sheet.write(i, 0, u'(0,0)', mystyle) # 这里使用 mystyle
原因解析
在使用xlwt
写入数据时,在传入XFStyle
格式的样式时,不要使用匿名函数
调用写入,否则写入4094个数据后就会超过阈值,报错:ValueError: More than 4094 XFs (styles)