问题描述
我的目标是突出显示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;