xlwt代码导致valueerror:超过4094 XF(样式)

时间:2015-02-17 19:13:03

标签: python xlwt

我正在尝试将测试结果发送到Excel工作表。在所有现实中,它写得很糟糕。对于我发送到Excel工作表的每一条数据,我将样式附加到该命令,从而累加了传递4094的XF计数。例如,我有以下方法写入excel表。我希望包含状态值“PASSED”的行的文本颜色为绿色,红色表示状态值为“FAILED”。另外,我希望所有文本都是粗体,高度为240:

def writetolog(self, method, status, error, note):
    if status == "PASSED":
        col = xlwt.easyxf('font: colour green, bold 1, height 240')
    elif status == "FAILED":
        col = xlwt.easyxf('font: colour red, bold 1, height 240')

    timestamp = str(datetime.now().strftime("%y-%m-%d %H:%M:%S.%f"))[:-4]
    timesave = str(self.starttime.strftime("%y-%m-%d_%H-%M"))

    try:
        self.sheet.write(self.row, 0, status, col)
        self.sheet.write(self.row, 1, method, col)
        self.sheet.write(self.row, 2, note, col)
        self.sheet.write(self.row, 3, str(error), col)
        self.sheet.write(self.row, 4, timestamp, col)
        self.wkbk.save('Log/Logfile_%s.xls' % timesave)

    except Exception as e:
        print "something went wrong in the write to log method"
        print e

    finally:
        self.row += 1

这意味着每次我调用此方法(非常频繁)时,它都会以新的方式发送(只是,它几乎总是相同)。我需要一种方法来做到这一点,而不是一遍又一遍地发送相同的格式。

此处出现了类似的问题:xlwt set style making error: More than 4094 XFs (styles)

虽然它有答案,但它是用于压缩数据,这不是我的目标。对答案的评论说你不应该用相同的格式重复调用xlwt.easyxf,所以我试图弄清楚如何在不经常使用它的情况下进行操作。

那么,如何在不经常向excel发送新样式的情况下,使用以下标准写入Excel工作表:

- If the status value is "PASSED", the text color of the entire row is green
- If the status value is "FAILED", the text color of the entire row is red
- All data is bold
- All data is height 240

是否有办法通过xlwt设置整个文件的条件格式?

1 个答案:

答案 0 :(得分:0)

希望将此添加为评论,但我没有足够的声誉。我一直在与类似的条件格式问题作斗争,并按照其他问题的建议设置style_compression = 2解决了它(不,它不会仅压缩数据的样式),但我可以看到,即使一个相对较小的电子表格现在有明显的处理延迟。

否则,您必须提前定义所有样式(即在循环之外),如果此处和那里只有一个格式参数不同,这可能会有点麻烦。