OpenPyXL使用内置条件格式,即:重复和唯一值

时间:2017-03-08 14:10:28

标签: python excel excel-formula python-3.5 openpyxl

我正在编写一个python方法,它检查Excel中的特定列并突出显示红色的重复值(如果有的话),然后将这些行复制到一个单独的工作表上,我将用它来检查它们为什么有重复值。这仅适用于资产管理,我想检查以确保没有两个确切的序列号或资产ID号等。

此时我只想检查列并突出显示红色的重复值。到目前为止,我已经启动了这个方法并且它运行它只是没有突出显示具有重复值的单元格。我在A列中使用了带有这些值的测试表,

(336,565,635,567,474,326,366,756,879,567,453,657,678,324,987,667,567,657,567)数字“567”重复几次。

def check_duplicate_values(self,wb):
    self.wb=wb
    ws=self.wb.active
    dxf = DifferentialStyle(fill=self.red_fill())
    rule = Rule(type="duplicateValues", dxf=dxf, stopIfTrue=None, formula=['COUNTIF($A$1:$A1,A1)>1'])
    ws.conditional_formatting.add('Sheet1!$A:$A',rule) #Not sure if I need this  
    self.wb.save('test.xlsx')

在Excel中,我可以创建一个条件格式规则来实现这一点但是在OpenPyXL中我不确定我是否正确使用了他们的内置方法。另外,我的公式可能不正确吗?

2 个答案:

答案 0 :(得分:0)

你指的是谁的内置方法? openpyxl是一个文件格式库,因此,您可以管理条件格式,因为它们存储在Excel工作表中。遗憾的是,规范的细节在规范中并不十分清楚,因此通常需要从现有规则进行逆向工程,尽管可能值得注意的是Excel创建的规则几乎总是比实际需要的更详细。

我会将更多问题直接发送到openpyxl邮件列表。

答案 1 :(得分:0)

只需删除公式即可,一切都很好。

unique_rule = Rule(type="uniqueValues", dxf=dxf, stopIfTrue=None)

您还可以使用唯一规则:

{{1}}

查看更多信息:https://openpyxl.readthedocs.io/en/stable/_modules/openpyxl/formatting/rule.html#RuleType