条件格式隐藏文本
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 1
或 0
的单元格值所以我知道这行得通。
[/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 TRUE
或 FALSE
,它们被视为文本,因此当您的条件触发时,格式会隐藏单元格值。
我建议您将公式更改为 return 1
或 0
,然后将显示 a
或什么都不显示
我有一个 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 1
或 0
的单元格值所以我知道这行得通。
[/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 TRUE
或 FALSE
,它们被视为文本,因此当您的条件触发时,格式会隐藏单元格值。
我建议您将公式更改为 return 1
或 0
,然后将显示 a
或什么都不显示