【问题标题】:EXCEL Conditional Formatting in C#C#中的EXCEL条件格式
【发布时间】:2025-11-22 05:10:02
【问题描述】:

我有一个名为“First Price”的列(excel 列:AG)和一个名为“First Price Override”的列(excel 列:AH)和一个名为“First Price Override 2”的列(excel 列:AI)。

我需要在 C# 中编写一些条件格式来检查 AH 或 AI 列中的值。如果他们在此单元格中输入了值,则 AG 列(与输入的值相关联的行 - 需要将字体样式删除线设置为 true)

我该怎么做?

        var orfirstpricerange1 = Worksheet.Range["AH:AH"];
        var orfirstpricerange2 = Worksheet.Range["AI:AI"];
        var firstpricerange = Worksheet.Range["AG:AG"];

firstpricerange.Font.Strikethrough = true;

我已经完成了上述操作,但不知道如何将它们放在一起使用条件格式。

【问题讨论】:

  • 这有帮助吗:*.com/questions/10240132/… ?
  • 试图遵循这一点,但我不知道如何检查该列是空单元格还是其中有值。上面的示例显示两列彼此相等。该示例还比较了指定的行 - 我需要将其应用于整个列。不仅仅是 D1 和 E1。

标签: c# excel vsto


【解决方案1】:
    //firstpricerange.Font.Strikethrough = true;

上面会将整个列的格式设置为“删除线”。我已经评论它是因为你不想让每个单元格都有删除线。

    Excel.FormatCondition format = (Excel.FormatCondition)(Worksheet.get_Range("AG:AG",
        Type.Missing).FormatConditions.Add(Excel.XlFormatConditionType.xlExpression, Excel.XlFormatConditionOperator.xlEqual,
        "=AH1=AI1", Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing));
    format.Font.Strikethrough = true;

“Excel”指的是using Excel = Microsoft.Office.Interop.Excel;

当前,当 AH 中的值等于 AI 中的值时,AG 列会被删除。

【讨论】:

  • 嗨 - 这很有用,尽管根据问题我试图检查 AH 或 AI 中是否有任何值(如果为真,则在 AG 行中设置删除线)。看起来默认设置是在没有值时设置删除线。我希望它在没有价值时不要删除。并在其中任一列中有值时删除线
  • 好的,您应该将公式从"=AH1=AI1" 更改为您需要的公式。在我的荷兰语版 excel 中这是 "=EN(AH1=AI1;NIET(ISLEEG(AH1));NIET(ISLEEG(AI1)))",在英文版中应该是 "=AND(AH1=AI1,NOT(ISBLANK(AH1)),NOT(ISBLANK(AI1)))"
  • 如何指定范围,例如 AG7:AG ?而不是整列?它目前正在标题列上应用删除线,我不希望它这样做。有什么想法吗?
  • 'AG7:AG' 不是有效范围...?我使用的是'AG:AG'(完整的列),在公式中我只使用第一行。如果您只是不在单元格地址中使用“$”,这适用于所有行(除非它们需要修复)。
  • 对于 Range,您将获得 AG7:AG5000(对于 50000,您可以使用包含数据的最后一行),在公式中您需要将 '1' 更改为 '7',所以它将是"=AH7<>AI7"(或公式中的任何内容)这是因为条件格式中的公式始终引用应应用条件格式的第一行。
【解决方案2】:
  Microsoft.Office.Interop.Excel.FormatCondition format = (Microsoft.Office.Interop.Excel.FormatCondition)(uiWorksheet.get_Range("AG:AG",
  Type.Missing).FormatConditions.Add(Microsoft.Office.Interop.Excel.XlFormatConditionType.xlExpression, Microsoft.Office.Interop.Excel.XlFormatConditionOperator.xlNotEqual,
  "=AH1<>AI1", Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing));
        format.Font.Strikethrough = true;

【讨论】:

    最近更新 更多