解决方案
对于设置样式的函数:
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 xlwt
def define_style():
font = xlwt.Font()
font.colour_index = 1
# 初始化样式
my_style = xlwt.XFStyle()
my_style.font = font # 设置字体
return my_style
if __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)