我想格式化电子表格(xls或xlsx),以便通过用特定颜色填充背景来格式化包含单词或以特定字符串结尾的任何单元格。使用python从Excel有条件地格式化文本字符串
例如,如果单元格包含单词“已删除”,请将其填充黑色并将文本涂成白色。 如果单元格以'.pf'结尾,则将单元格涂成红色。
我发现从几年前类似的疑问,建议如下:
import xlrd
import xlutils.copy
inBook = xlrd.open_workbook('input.xls', formatting_info=True)
outBook = xlutils.copy.copy(inBook)
def _getOutCell(outSheet, colIndex, rowIndex):
""" HACK: Extract the internal xlwt cell representation. """
row = outSheet._Worksheet__rows.get(rowIndex)
if not row: return None
cell = row._Row__cells.get(colIndex)
return cell
def setOutCell(outSheet, col, row, value):
""" Change cell value without changing formatting. """
# HACK to retain cell style.
previousCell = _getOutCell(outSheet, col, row)
# END HACK, PART I
outSheet.write(row, col, value)
# HACK, PART II
if previousCell:
newCell = _getOutCell(outSheet, col, row)
if newCell:
newCell.xf_idx = previousCell.xf_idx
# END HACK
outSheet = outBook.get_sheet(0)
setOutCell(outSheet, 5, 5, 'Test')
outBook.save('output.xls')
虽然这确实从input.xls到output.xls的值复制,这似乎并没有转移格式(中当打开output.xls时,input.xls中的测试值不再被格式化,excel中的“管理规则”下也不存在条件格式规则。
数字值的“if”语句似乎可行,但同样,I我正在寻找一种方法来格式化包含某些字符串的单元格。谢谢!
您是否尝试在原地更改文件?您可以在脚本运行之前创建文件的备份。 – Alfe 2013-05-08 19:43:53
我不认为就地编辑是可能的。从我所了解的xlutils只允许您复制和修改副本。如果win32com可以做到这一点,这将是一个很酷的尝试方向,但我不知道这一点。 win32com也不是我的首选策略,因为我希望这个脚本能够在未安装excel的机器上运行(linux)。 – user2363458 2013-05-09 15:00:46