条件格式隐藏文本

Conditional Formatting Hides Text

我有一个 Excel 工作表,我正在从用 C# 编写的加载项中添加条件格式。

条件触发正常,我可以更改填充颜色,但文本总是被隐藏。

如果我从格式中删除填充颜色,应用格式后文本仍然隐藏。

如果我删除所有格式并仅应用条件而不更改任何格式,文本仍然隐藏。

当格式条件不再有效时,文本将按您预期的方式显示。

单元格值肯定设置正确。

为什么会这样?

C#代码如下:

var disabledFormat = "IF(blah blah...),FALSE,TRUE)";
var formatCondition = (Excel.FormatCondition)cell.FormatConditions.Add(
                           Excel.XlFormatConditionType.xlExpression, 
                           Type.Missing, disabledFormat);
formatCondition.Font.Color = ColorTranslator.FromHtml("#C0C0C0");
formatCondition.Interior.Color = ColorTranslator.FromHtml("#F0F0F0");

[编辑]

我试过将颜色更改为白色、黑色、红色等,但在应用条件格式时它仍然不可见。

[/编辑]

[编辑2]

已按要求完全禁用格式字符串: (该代码看起来并不完全 link,因为它跨越多个 类,我只是试图填补空白以提供帮助:$)

const string FORMAT_DISABLED = "=IF(LEFT(MID('{2}'!{0},FIND(\"|\",'{2}'!{0},FIND(\"|\",'{2}'!{0})+1)+1,999),LEN(INDIRECT(\"'$lookup_grading'!\"&ADDRESS({1},1))))=INDIRECT(\"'$lookup_grading'!\"&ADDRESS({1},1)),FALSE,TRUE)";

var dropdownCell = "Q5";

var disabledFormat = string.Format(FORMAT_DISABLED, cellName, dropdownCell, controlSheetName);

解析为:

=IF(LEFT(MID('$controls_Distribution Grid'!W19,FIND("|",'$controls_Distribution Grid'!W19,FIND("|",'$controls_Distribution Grid'!W19)+1)+1,999),LEN(INDIRECT("'$lookup_grading'!"&ADDRESS(Q5,1))))=INDIRECT("'$lookup_grading'!"&ADDRESS(Q5,1)),FALSE,TRUE)

为了进一步澄清,它的作用是在另一个具有相同地址的工作表的单元格中查找一个值,从该单元格中的格式化字符串中获取一个值,并将其与由在下拉列表中选择的项目。如果有匹配 TRUE 是 returned.

相同的公式也用于 return 10 的单元格值所以我知道这行得通。

[/Edit2]

[编辑3]

我已将问题缩小到 NumberFormat,即 "a";;;。 当条件格式没有触发时,这会正确显示 a(或应用 Webdings 的勾号)。 但是当条件格式触发时, NumberFormat 的输出不会出现。 我想不出为什么这是故意的,所以我猜这是 Excel 中的错误,但我会做一些谷歌搜索来检查

[/Edit3]

这是 return 为 1 或 0 的单元格中的公式(希望它足够清楚!):

=IF(
    LEFT(
        MID('$controls_Distribution Grid'!$V,
            FIND("|",'$controls_Distribution Grid'!$V,
                FIND("|",'$controls_Distribution Grid'!$V)+1
            )+1,999),
        LEN(INDIRECT("'$lookup_grading'!"&ADDRESS(Q5,1)))
    )=INDIRECT("'$lookup_grading'!"&ADDRESS(Q5,1)),
1,0)

这听起来可能是字体文件中的错误。尝试使用标准字符 A-Z,看看它在格式化后会消失。如果它没有消失,那么您的字体文件可能已损坏。可能必须转储 wingdings 字体并重新安装。

试试这个

formatCondition.Font.ThemeColor = ColorTranslator.FromHtml("#909090");
formatCondition.Interior.ThemeColor = ColorTranslator.FromHtml("#F0F0F0");
formatCondition.Interior.PatternColorIndex = xlAutomatic;

不知道有没有必要PatternColorIndex,这是我录制宏的结果

编辑: 如果对您有帮助,这就是宏:

With Selection.Font
    .ThemeColor = xlThemeColorDark1
    .TintAndShade = -0.499984740745262
End With
With Selection.Interior
    .Pattern = xlSolid
    .PatternColorIndex = xlAutomatic
    .ThemeColor = xlThemeColorDark1
    .TintAndShade = -0.149998474074526
    .PatternTintAndShade = 0
End With

数字格式的定义是用;

分隔的四个字段
<POSITIVE>;<NEGATIVE>;<ZERO>;<TEXT>

您的数字格式 "a";;; 表示如果值为正数则显示 a ,如果为零、负数或文本则不显示任何内容。

您的公式 returns TRUEFALSE,它们被视为文本,因此当您的条件触发时,格式会隐藏单元格值。

我建议您将公式更改为 return 10,然后将显示 a 或什么都不显示