Python openpyxl数据验证以及格式

时间:2018-02-16 10:37:28

标签: python excel python-3.x formatting openpyxl

我正在使用openpyxl创建一个.xlsx文件来聚合一些数据。

其中一列是Status,需要进行数据验证,以确保它只包含多个选项之一。我做到这一点很好:

validator = openpyxl.worksheet.datavalidation.DataValidation(type = 'list',
                                                             formula1 = ('"'
                                                                         'Option 1,'
                                                                         'Option 2,'
                                                                         'Option 3,'                                                                       
                                                                         '"'))

validator.promptTitle = 'Status Selection'
validator.prompt = 'Please select a status.'

validator.errorTitle = 'Invalid Status'
validator.error = 'Your status is not in the list of accepted entries.'

worksheet.add_data_validation(validator)

validator.add('I1:I1048576')

但我还需要为数据验证格式化单元格。

这是该列目前的样子。我需要做的是在选择Option 1时使单元格的bg颜色变为红色,如果选择Option 2则变为黄色,如果选择Option 3则变为绿色。

我尝试过在这里和谷歌上搜索,并且花了一些一对一的时间来讨论一些有点乏味的openpyxl文档(我从几个小时后直接看到数据验证和条件格式化部分)和条件格式的最后一个例子接近我需要的东西我不知道如何使它适应我的情况。

我究竟应该如何获得我描述的效果? bg颜色是否根据从数据验证下拉列表中选择的值而变化?

1 个答案:

答案 0 :(得分:0)

我一直在寻找做同样的事情,并且发现这个主题对我的第一部分有所帮助。这是我解决第二部分的方法:

worksheet.conditional_formatting.add('A1:'+get_column_letter(worksheet.max_column)+str(worksheet.max_row),\
CellIsRule(operator='equal', formula=['"Option 1"'], fill=PatternFill(bgColor="FF0000")))
worksheet.conditional_formatting.add('A1:'+get_column_letter(worksheet.max_column)+str(worksheet.max_row),\
CellIsRule(operator='equal', formula=['"Option 2"'], fill=PatternFill(bgColor="FFFF00")))
worksheet.conditional_formatting.add('A1:'+get_column_letter(worksheet.max_column)+str(worksheet.max_row),\
CellIsRule(operator='equal', formula=['"Option 3"'], fill=PatternFill(bgColor="00FF00")))

(如果不需要对整个工作表进行条件格式化,则可以调整格式区域)