C# Additiong conditional formatting for 3 Symbols Icon set and getting error "System.Runtime.InteropServices.COMException: 'Exception from HRESULT: 0x800A03EC'"

ScottTurner 1 Reputation point
2022-01-31T19:55:46.143+00:00

I am new to VSTO and using mostly google and stack overflow to work my way through it. At first I thought it might be I was using a 0 based indez and remembered that Excel uses a 1 based index but no luck there either.
I am trying to format a cell to have a green checkmark when the cell value is >=1 and a red X when the value is less than 1
Basically this
169958-conditionalformat.png

I am getting the exception on this line iconSetCondition.IconCriteria1.Type = XlConditionValueTypes.xlConditionValueNumber;

I have also tried
iconSetCondition.IconCriteria.Item1.Type = XlConditionValueTypes.xlConditionValueNumber;

AND

IconCriterion iconCriterion = iconSetCondition.IconCriteria1;
iconCriterion.Type = XlConditionValueTypes.xlConditionValueNumber;

Any help or suggestions on what I am missing would be appreciated.

Here is the code.

using Microsoft.Office.Interop.Excel;

/// <summary>  
/// Applies conditioanl formatting to a range  
/// </summary>  
public static class ConditionalFormat  
{  
    /// <summary>  
    /// Apply the formatting to the range  
    /// </summary>  
    /// <param name="range">The Excel Range to be foramtted</param>  
    public static void ApplyGreenCheckRedx(Range range)  
    {  
        IconSetCondition iconSetCondition = range.FormatConditions.AddIconSetCondition();  
        iconSetCondition.IconSet = XlIconSet.xl3Symbols;  
        IconCriteria iconCriteria = iconSetCondition.IconCriteria;  
        iconSetCondition.IconCriteria[1].Type = XlConditionValueTypes.xlConditionValueNumber;  
        iconSetCondition.IconCriteria[1].Value = 1;  
        iconSetCondition.IconCriteria[1].Operator = (int)XlFormatConditionOperator.xlGreaterEqual;  
        iconSetCondition.IconCriteria[2].Type = XlConditionValueTypes.xlConditionValueNumber;  
        iconSetCondition.IconCriteria[2].Value = 1;  
        iconSetCondition.IconCriteria[2].Operator = (int)XlFormatConditionOperator.xlLess;  
        iconSetCondition.IconCriteria[3].Type = XlConditionValueTypes.xlConditionValueNumber;  
        iconSetCondition.IconCriteria[3].Value = 0;  
        iconSetCondition.IconCriteria[3].Operator = (int)XlFormatConditionOperator.xlGreater;  
               

        iconSetCondition.ShowIconOnly = true;  
    }  
}  
C#
C#
An object-oriented and type-safe programming language that has its roots in the C family of languages and includes support for component-oriented programming.
10,180 questions
Office Development
Office Development
Office: A suite of Microsoft productivity software that supports common business tasks, including word processing, email, presentations, and data management and analysis.Development: The process of researching, productizing, and refining new or existing technologies.
3,453 questions
{count} votes

1 answer

Sort by: Most helpful
  1. Rajesh Sharma 0 Reputation points
    2024-03-13T18:39:28.2033333+00:00
            Excel.Range sourceRange2 = this.Application.get_Range("R1:R9999");
    
            var iconSetCondition1 = (Excel.IconSetCondition)sourceRange2.FormatConditions.AddIconSetCondition();
    
            iconSetCondition1.SetFirstPriority();
    
            iconSetCondition1.ShowIconOnly = false;
    
            iconSetCondition1.IconSet = Excel.XlIconSet.xl3Arrows;
    
            var iconCriteria1 = iconSetCondition1.IconCriteria[3];
    
            iconCriteria1.Type = Excel.XlConditionValueTypes.xlConditionValueNumber;
    
            iconCriteria1.Icon = XlIcon.xlIconGreenUpArrow;
    
            iconCriteria1.Value = Convert.ToDouble(200);
    
            iconCriteria1.Operator = (int)Excel.XlFormatConditionOperator.xlGreater;
    
            var iconCriteria2 = iconSetCondition1.IconCriteria[2];
    
            iconCriteria2.Type = XlConditionValueTypes.xlConditionValueNumber;
    
            iconCriteria2.Icon = XlIcon.xlIconYellowSideArrow;
    
            iconCriteria2.Value = Convert.ToDouble(100);
    
            iconCriteria2.Operator = (int)XlFormatConditionOperator.xlGreater;
    
            iconSetCondition1.IconCriteria[1].Icon = XlIcon.xlIconRedDownArrow;
    
    0 comments No comments