Excel范围内的条件格式,使每个单元格都具有一个向上箭头图标,而不管其值如何

问题描述

我的目标是突出显示Excel范围的一部分(我可以使用条件格式进行格式化),但现在它还需要向上述范围内的每个单元格添加向上箭头。>

那是怎么做到的?


我尝试过的是这样的

var wb = Globals.ThisAddIn.Application.ActiveWorkbook;
var formatIcon = rngExistingColumns.FormatConditions.AddIconSetCondition() as Excel.IconSetCondition;
formatIcon.Formula = "=1";
formatIcon.IconSet = wb.IconSets[Excel.XlIconSet.xl3Arrows];

var crit1 = formatIcon.IconCriteria;

crit1[1].Type = Excel.XlConditionValueTypes.xlConditionValueFormula;
crit1[1].Operator = (int) Excel.XlFormatConditionoperator.xlGreater;
crit1[1].Value = 0;

但是我没有任何结果,只会抛出com异常。

解决方法

请勿手动设置红色图标crit1[1]的规则,因为红色图标是针对绿色/黄色图标规则的最后一个规则。

我的示例代码有效,并且只设置了绿色/黄色规则。值60将为黄色,值80和90将为绿色,另一个将为红色。

var wb = Globals.ThisAddIn.Application.ActiveWorkbook;

wb.ActiveSheet.Range["A1"].Value2 = "20";
wb.ActiveSheet.Range["A2"].Value2 = "80";
wb.ActiveSheet.Range["A3"].Value2 = "60";
wb.ActiveSheet.Range["A4"].Value2 = "40";
wb.ActiveSheet.Range["A5"].Value2 = "30";
wb.ActiveSheet.Range["A6"].Value2 = "90";

// Add an icon set condition to the range
Excel.IconSetCondition iconSetCondition1 =
    (Excel.IconSetCondition)
    wb.ActiveSheet.Range["A1","A6"].
    FormatConditions.AddIconSetCondition();

iconSetCondition1.SetFirstPriority();
iconSetCondition1.ShowIconOnly = false;

iconSetCondition1.IconSet =
    Excel.XlIconSet.xl3Arrows;

var yellowIcon = iconSetCondition1.IconCriteria[2];
yellowIcon.Type = Excel.XlConditionValueTypes.xlConditionValueNumber;
yellowIcon.Operator = (int)Excel.XlFormatConditionOperator.xlGreaterEqual;
yellowIcon.Value = Convert.ToDouble(60);

var greenIcon = iconSetCondition1.IconCriteria[3];
greenIcon.Type = Excel.XlConditionValueTypes.xlConditionValueNumber;
greenIcon.Operator = (int)Excel.XlFormatConditionOperator.xlGreaterEqual;
greenIcon.Value = Convert.ToDouble(80);

2020/08/25 更新 如果要使顶部规则为红色,第二条规则为绿色,最后一条为黄色,则可以设置Icon来更改规则顺序。

在我的示例中,值60将为绿色,值80和90将为红色,另一个将为黄色。

var greenIcon = iconSetCondition1.IconCriteria[2];
greenIcon.Icon = Excel.XlIcon.xlIconGreenCircle;
greenIcon.Type = Excel.XlConditionValueTypes.xlConditionValueNumber;
greenIcon.Operator = (int)Excel.XlFormatConditionOperator.xlGreaterEqual;
greenIcon.Value = Convert.ToDouble(60);

var redIcon = iconSetCondition1.IconCriteria[3];
redIcon.Icon = Excel.XlIcon.xlIconRedCircle;
redIcon.Type = Excel.XlConditionValueTypes.xlConditionValueNumber;
redIcon.Operator = (int)Excel.XlFormatConditionOperator.xlGreaterEqual;
redIcon.Value = Convert.ToDouble(80);

var yellowIcon = iconSetCondition1.IconCriteria[1];
yellowIcon.Icon = Excel.XlIcon.xlIconYellowCircle;