8

如果值与另一列中的值不同,我需要将颜色应用于单元格的文本。最好的方法是什么?我能想到的方式是相当昂贵的。

 for (int i = 0; i < ColumnARange.Cells.Count; i++)
                    {
                        if (ColumnARange.Cells[i, 1] != ColumnBRange.Cells[i, 1])
                        {
                            Range currCell = ColumnBRange.Cells[i, 1];
                            currCell.Font.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Red);
                        }
                    }

尝试如下条件格式,但徒劳无功。

FormatCondition cond = ColumnBRange.FormatConditions.Add(XlFormatConditionType.xlCellValue, XlFormatConditionOperator.xlNotEqual, ColumnARange);
                cond.Font.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Red);

我正在使用 VSTO,C#

4

3 回答 3

9

下面的代码,将条件格式添加到 D1 到 E10 的单元格范围

它分别比较值 D1 = E1 或 D2 = E2。您可以在 FormatCondition 对象上设置字体颜色或颜色填充。

FormatCondition format =(FormatCondition)( targetSheet.get_Range("D1:E10",
                Type.Missing).FormatConditions.Add(XlFormatConditionType.xlExpression,
                                                   XlFormatConditionOperator.xlEqual,
                                                   "=$D1=$E1", 
                                                   Type.Missing, Type.Missing, Type.Missing,
                                                   Type.Missing, Type.Missing));
            
            format.Font.Bold = true;
            format.Font.Color = 0x000000FF;
于 2012-04-20T07:17:41.943 回答
6

假设B1:B10如果单元格的值不等于 的值,您想为单元格着色A1:A10,即

B1<>A1导致B1被着色,B2<>A2导致B2被着色等。

然后您可以执行以下操作

Range columnBRange = (Range)oSheet.Range[oSheet.Cells[1,2], oSheet.Cells[10,2]];

Range columnARange = (Range)oSheet.Range[oSheet.Cells[1,1], oSheet.Cells[1,1]];

FormatCondition cond = (FormatCondition) ColumnBRange.FormatConditions.Add(XlFormatConditionType.xlCellValue, XlFormatConditionOperator.xlNotEqual, "="+ColumnARange.Address[false,true]);
cond.Font.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Red); //Red letters
cond.Interior.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.LightYellow); //Light yellow cell background

请注意,添加"="ColumnARange.Address[false,true]是必需的,否则该Add方法将使用Address作为文字字符串而不是单元格引用。

如果您查看应用于B1:B10Excel 工作表中单元格的条件格式规则,它将说明Cell Value <> B1范围内的每个单元格,这有点令人困惑 IMO,但格式仍然正确应用。

为了完整性:我在Range.Address属性上使用可选对象,如下所示 Range.Address[isRowAbsolute,isColumnAbsolute]

于 2017-07-06T22:56:43.007 回答
1

尝试这个

FormatCondition cond = ColumnBRange.FormatConditions.Add(XlFormatConditionType.xlCellValue, XlFormatConditionOperator.xlNotEqual, "=$B1");
                cond.Font.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Red);
于 2014-09-08T12:27:14.693 回答