Python xlwt库中的set_style不适用于包含文本的单元格

时间:2014-01-18 01:36:24

标签: python excel xlwt

我正在使用Python中的Excel电子表格。如果不遵守条件,我想更改整行的背景颜色。但是,在运行我的代码后,只更改了行的空单元格(不包含任何字符的单元格)的背景颜色。我的前9列包含信息,我的代码只将背景颜色从J列更改为Z.

from xlrd import open_workbook
from xlwt import Workbook, easyxf
Error_Style = easyxf('pattern: pattern solid, fore_colour red;',)

[...]

else:
w_sheet.row(row_index).set_style(Error_Style)

[...]

我想知道我是否使用了easyxf的错误模式。

1 个答案:

答案 0 :(得分:1)

每当使用xlwt编写单元格时,不仅要写入该单元格的值,还要写入该单元格的样式,这将覆盖该单元格中任何先前的样式。遗憾的是,你不能只是“继承”行样式。目前,实现所需内容的方法是创建在写入受影响的行时将使用的样式,并包括那些同时正在编写值的样式。

例如,我有一个报告,其中背景应该在白色和灰色之间交替。虽然我想将所有偶数行设置为灰色而与值无关,但我必须有一对样式,并在适当的时候选择合适的样式。它是这样的:

styles = (easyxf(), easyxf('pattern: pattern solid, fore_color gray25'))

for rx, record in enumerate(records, start=1):
    style = styles[rx % 2]  # Do your own conditional style selection here
    for cx, value in enumerate(record):
        ws.write(rx, cx, value, style)

实际上,我不仅仅有一对款式,我有几双款式。 (各种不同的列具有不同的数字格式,一些百分比,一些日期等。)因此,对于我自己的情况,它比我上面显示的更复杂。但希望这能说明“在适当的时候选择合适的风格”的意思。