【问题标题】:xlwt set style making error: More than 4094 XFs (styles)xlwt 设置样式错误:超过 4094 个 XF(样式)
【发布时间】:2016-01-25 22:12:28
【问题描述】:

我使用 Xlwt 来编写一个 excel 文件。它的单元格有一些样式(颜色、对齐方式、边框、...)

当我使用 XFSt​​yle 并设置边框和其他样式属性时,在某些情况下会出错: 超过 4094 个 XF(样式)

为什么? 这个错误我该怎么办?

谢谢

【问题讨论】:

标签: python excel xlwt


【解决方案1】:

我读取并跟踪在执行期间调用的函数和方法。

我找到了解决方案:

wb = xlwt.Workbook(style_compression=2)

使用:style_compression=2

它的工作!

【讨论】:

  • 请注意,如果您在没有使用多种样式的情况下遇到该问题,那么您很可能做错了什么。不要打电话easyxf()循环重复描述一种风格,例如。
  • 正确的解决方法应该是重用样式。我不相信你有 4094 种不同的风格......我在下面投了赞成票,因为它更有效。
  • 感谢 Dmitry Nazarov:最佳评论奖
【解决方案2】:

在循环中遇到同样的问题时,我从循环中提取了格式的描述,它继续顺利:

这不起作用:

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)

【讨论】:

    【解决方案3】:

    因此,对于后代,无论您正在寻找答案的人,您都在代码中做错了。

    基本上,您的代码发生的情况是您生成了超过 4094 个不同的样式实例(重要的是,不是不同的样式,如果您创建新的样式实例就足够了)。

    在我们的例子中,我们有类似的东西:

    for i, row in enumerate(rows):
        workbook.write(i, 0, row, currency_formatter(row))
    

    货币格式化程序为每一行创建了新样式。

    如果样式相同,我们必须做的是缓存每种货币的样式。

    所以,正确的解决方法是不要创建这么多样式!

    干杯,迈克。

    【讨论】:

      猜你喜欢
      • 2021-10-07
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-24
      • 2012-02-02
      • 1970-01-01
      • 2019-04-08
      • 1970-01-01
      相关资源
      最近更新 更多