【发布时间】:2016-01-25 22:12:28
【问题描述】:
我使用 Xlwt 来编写一个 excel 文件。它的单元格有一些样式(颜色、对齐方式、边框、...)
当我使用 XFStyle 并设置边框和其他样式属性时,在某些情况下会出错: 超过 4094 个 XF(样式)
为什么? 这个错误我该怎么办?
谢谢
【问题讨论】:
-
我以前见过这个,这个链接中提到的解决方案没有帮助。
我使用 Xlwt 来编写一个 excel 文件。它的单元格有一些样式(颜色、对齐方式、边框、...)
当我使用 XFStyle 并设置边框和其他样式属性时,在某些情况下会出错: 超过 4094 个 XF(样式)
为什么? 这个错误我该怎么办?
谢谢
【问题讨论】:
我读取并跟踪在执行期间调用的函数和方法。
我找到了解决方案:
wb = xlwt.Workbook(style_compression=2)
使用:style_compression=2
它的工作!
【讨论】:
easyxf()循环重复描述一种风格,例如。
在循环中遇到同样的问题时,我从循环中提取了格式的描述,它继续顺利:
这不起作用:
for ... :
ws. row(row_index).write(col_index, value, easyxf('pattern: pattern solid, fore_colour yellow; align: wrap 1'))
但确实如此:
ostyle = easyxf('pattern: pattern solid, fore_colour yellow; align: wrap 1')
for .... :
ws.row(row_index).write(col_index, value,ostyle)
【讨论】:
因此,对于后代,无论您正在寻找答案的人,您都在代码中做错了。
基本上,您的代码发生的情况是您生成了超过 4094 个不同的样式实例(重要的是,不是不同的样式,如果您创建新的样式实例就足够了)。
在我们的例子中,我们有类似的东西:
for i, row in enumerate(rows):
workbook.write(i, 0, row, currency_formatter(row))
货币格式化程序为每一行创建了新样式。
如果样式相同,我们必须做的是缓存每种货币的样式。
所以,正确的解决方法是不要创建这么多样式!
干杯,迈克。
【讨论】: