使用 python win32com 添加条件格式(图标集)

问题描述 投票:0回答:1

我想使用 python win32com 在 Excel 工作表中添加条件格式,条件如下: 向上箭头:单元格值 >= 0 向下箭头:单元格值 < 0

Expected Excel output

这是我的代码,但它向我显示“交通灯”而不是“箭头”集。

format_condition = worksheet.Cells(start_row + 1, col).FormatConditions.AddIconSetCondition()

Actual Excel output

我错过了什么?

python excel conditional-formatting win32com
1个回答
0
投票

我认为如果未指定,默认情况下会使用交通信号灯,即使箭头位于列表顶部。
您需要指定要使用“xl3Arrows(彩色)”并设置条件。

import win32com.client as win32


### Constants [Can be imported if available in Module(s)]
xlConditionValueNumber = 0
xlIconNoCellIcon = -1
xlIconGreenUpArrow = 1
xlIconRedDownArrow = 3
xl3Arrows = 1  # xl3Arrows (Colored) = 1 

### Create Excel object
excel = win32.gencache.EnsureDispatch('Excel.Application')
# excel.Visible = True

### Open Excel Workbook and required Worksheet
wb = excel.Workbooks.Open(r'<path>\foo.xlsx')
ws = wb.Worksheets(1)

### Conditional Format range
ws.Range("E5:S5").Select()

### Set Conditional Formatting to use IconSet
excel.Selection.FormatConditions.AddIconSetCondition()
excel.Selection.FormatConditions(excel.Selection.FormatConditions.Count).SetFirstPriority()

### Set Conditional Format basics including the icon style
cf1 = excel.Selection.FormatConditions(1)
cf1.ReverseOrder = False
cf1.ShowIconOnly = False
cf1.IconSet = excel.ActiveWorkbook.IconSets(xl3Arrows)  # 3 Arrows Coloured

### Disable yellow arrow
cf2 = excel.Selection.FormatConditions(1).IconCriteria(2)
cf2.Type = xlConditionValueNumber
cf2.Value = 0
cf2.Operator = 7
cf2.Icon = xlIconNoCellIcon

### Set Conditional Format Criteria for Green Arrow
### >= 0 Type: Number
cf3 = excel.Selection.FormatConditions(1).IconCriteria(3)
cf3.Type = xlConditionValueNumber
cf3.Value = 0
cf3.Operator = 7
cf3.Icon = xlIconGreenUpArrow

### Set Conditional Format Criteria for Red Arrow
### Default condition
excel.Selection.FormatConditions(1).IconCriteria(1).Icon = xlIconRedDownArrow

### Save and Quit
ws.Range("A1").Select()
wb.SaveAs(r'<path>\foo_out.xlsx')
excel.Application.Quit()



CF 规则显示图标样式为自定义,但设置为使用箭头

© www.soinside.com 2019 - 2024. All rights reserved.