条件格式隐藏文本
我有一个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]
完整的disabledFormatstring请求︰(代码看起来不完全链接,因为它跨越了几个类,我只是试图填补空白是有帮助的:$)
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)
为了进一步澄清,它会做的是在另一个工作表中的单元格中查找具有相同地址的值,并从该单元格中的格式化string中获取值,并将其与下拉列表中所选项目指示的值进行比较。 如果有匹配返回TRUE
。
同样的公式也用于返回1
或0
的单元格值,所以我知道这工作正常。
[/ EDIT2]
[EDIT3]
我把问题缩小到了NumberFormat
,它是"a";;;
。 条件格式不触发时,正确显示(或应用Webdings的勾号)。 但是,当条件格式触发NumberFormat的输出不会出现。 我想不出为什么这是故意的,所以我猜这是Excel中的一个错误,但我会做一些谷歌search来检查
[/ 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)
数字格式的定义是由四个字段分隔;
<POSITIVE>;<NEGATIVE>;<ZERO>;<TEXT>
你的数字格式"a";;;
意味着如果值是正数则显示a
,如果为零,则负数或文字不显示。
您的公式返回TRUE
或FALSE
,这些都被视为文本,所以当您的条件触发时,格式将隐藏单元格值。
我build议你改变你的公式返回1
或0
,然后将显示a
或没有
尝试使用这个
formatCondition.Font.ThemeColor = ColorTranslator.FromHtml("#909090"); formatCondition.Interior.ThemeColor = ColorTranslator.FromHtml("#F0F0F0"); formatCondition.Interior.PatternColorIndex = xlAutomatic;
我不知道PatternColorIndex
是否有必要,这是我从macros观录音中得到的。
编辑:这是macros,如果这可以帮助你:
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
这听起来像可能是字体文件中的错误。 尝试一个标准的字符AZ来看它它格式化时会消失。 如果它不消失,那么你可能有一个损坏的字体文件。 可能需要转储wingdings字体并重新安装。