条件格式隐藏文本

时间:2015-01-28 14:38:46

标签: c# excel format

我有一个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");

[编辑]

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

[/编辑]

[EDIT2]

请求的完整disabledFormat字符串: (代码看起来不完全链接,因为它跨越了几个类,我只是试图填补空白有用:$)

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则返回。

同样的公式也用于返回单元格值的10,所以我知道这样可行。

[/ EDIT2]

[EDIT3]

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

[/ EDIT3]

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

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

3 个答案:

答案 0 :(得分:1)

尝试使用此

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

答案 1 :(得分:1)

数字格式的定义是由;

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

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

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

我建议您更改公式以返回10,然后显示a或不显示

答案 2 :(得分:0)

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