Excel Interop Условное форматирование - PullRequest
5 голосов
/ 09 июня 2009

Я только что заметил следующую страницу: Настройка условного форматирования в Excel 2007 , которая очень похожа на то, что я хотел бы сделать, но я не могу найти подходящие функции для выполнения чего-либо немного отличается.

Мне интересно, знает ли кто-нибудь способ применения условного форматирования к диапазону на основе набора текстовых значений. Например. Я хочу сказать:

Если вы видите «InvalidValue1» ИЛИ «InvalidValue2», выделите КРАСНЫЙ иначе, если вы видите «ПРЕДУПРЕЖДЕНИЕ», выделите ЖЕЛТЫЙ

У меня есть целый ряд недопустимых значений и, возможно, значений предупреждений. Мне также нужно делать это по столбцам для очень больших наборов данных, поэтому, где это возможно, я хотел бы использовать встроенные функции Excel для выделения ошибок в пределах диапазона.

Кто-нибудь знает, возможно ли это вообще?

Привет

Ответы [ 3 ]

6 голосов
/ 09 июня 2009

Я считаю, что мне удалось найти решение проблемы (хотя выбор ячеек довольно причудливый, и я еще не совсем разобрался с этим. Например, моя формула использует A1, что фактически означает C1 из-за выбранного диапазона). 1001 *

Вот код, который я использовал для всех, кто интересуется:

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.

3 голосов
/ 17 декабря 2011
 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 голосов
/ 10 августа 2011

Если вы используете .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;
...