Excel Interop条件格式

时间:2009-06-09 10:53:35

标签: .net interop ms-office

我刚刚发现了以下页面:Setting Conditional Formatting in Excel 2007这与我想做的事情非常相似,但我似乎无法找到适当的功能来做一些稍微不同的事情。

我想知道是否有人知道根据一组文本值将条件格式应用于范围的方法。例如。我想说:

如果您看到“InvalidValue1”或“InvalidValue2”突出显示RED 否则,如果您看到“警告”突出显示黄色

我有一系列无效值,可能还有警告值。我还需要逐列地为非常大的数据集执行此操作,因此在可能的情况下,我希望使用内置的Excel功能来突出显示范围内的错误。

有人知道这是否可能吗?

此致

3 个答案:

答案 0 :(得分:6)

我相信我已经设法找到问题的解决方案(尽管Cell选择相当奇怪,我还没有完全排序。例如我的公式使用A1,实际上意味着C1因为选定的范围)。 / p>

以下是我对其他任何感兴趣的人使用的代码:

string condition = @"=OR(ERROR1, ERROR2, ERROR3)";
var cfOR = (FormatCondition)targetSheet.get_Range("C1", "C10").FormatConditions.Add(XlFormatConditionType.xlExpression, Type.Missing,condition), Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);

cfOR.Interior.Color = 0x000000FF;
cfOR.Font.Bold = true;
cfOR.Font.Color = 0x00FFFFFF;

请注意,FormatConditions.Add()方法对于不同版本的Excel互操作具有不同的签名。

答案 1 :(得分:3)

 using Excel = Microsoft.Office.Interop.Excel;
 ...
 object mis = Type.Missing;

 Excel.FormatCondition cond =
    (Excel.FormatCondition)range.FormatConditions.Add(Excel.XlFormatConditionType.xlCellValue,
    Excel.XlFormatConditionOperator.xlEqual, "1",
    mis, mis, mis, mis, mis);
    cond.Interior.PatternColorIndex = Excel.Constants.xlAutomatic;
    cond.Interior.TintAndShade = 0;
    cond.Interior.Color = ColorTranslator.ToWin32(Color.White);
    cond.StopIfTrue = false;

答案 2 :(得分:2)

如果您使用的是.Net 4,则以下是使用动态和命名参数的重写

dynamic range = sheet.Range("A2").Resize(rowCount, 11);

const string redCondition = "=OR(ERROR1, ERROR2, ERROR3)";

dynamic format = range.FormatConditions.Add(XlFormatConditionType.xlExpression, Formula1: redCondition);
format.Interior.Color = 0x0000FF;
format.Font.Color = 0x00FFFF;