[英]Apache POI formula to check any of the cell from the range is not blank
我正在使用条件格式处理Apache POI。 我希望能够编写一个公式,例如-如果指定范围内的任何列都不是数字,则突出显示所有这些列。 我正在尝试使用公式-ISNUMBER($ J1:P1000)。 但这是行不通的。
ConditionalFormattingRule rule = sheetCF.createConditionalFormattingRule("ISNUMBER($J1:P1000))");
如果我只尝试使用公式-ISNUMBER($ J1)的单个单元格,它将起作用。 但是我想确定如果从J到P的任何单元格都是数字,然后进行一些突出显示。
该线程提供了基于某些规则突出显示某些单元格的代码的详细信息,因此不再重复-Apache POI-条件格式-需要为规则和格式设置不同的单元格范围
就我现在所理解的问题(还考虑了注释)而言,如果此范围内的任何单元格包含数字内容,则要求突出显示整个范围J1:P[n]
(例如,我将采用J1:P1000
)。 使用公式作为ConditionalFormattingRule
。
背景知识:
条件格式(CF)的工作原理是将规则应用于一系列单元格,并且如果满足规则,则具有要使用的格式。 在运行CF进程时,将测试应用范围内的每个单元格是否满足规则。 如果是这样,将使用该格式,否则将不使用。
因此,如果规则是一个公式,那么我们必须从范围内每个单个单元格的角度来看这个公式。 公式中的单元格引用是相对的还是使用$
固定的,在其中起着重要作用。
在单元格引用中, $
可以固定列引用和行引用。 例如,在A1
,列引用和行引用都是相对的。 在$A1
,列参考列A
是固定和行参考是相对的。 在A$1
,列引用是相对的,而对行1
的行引用是固定的。 在$A$1
,对列A
的列引用以及对行1
的行引用都是固定的。 因此,最后一个引用将始终引用单元格A1
。
具体示例:
在我的答案中, Apache POI-条件格式-需要为规则和格式设置不同的单元格范围 ,与此答案相关,公式规则: AND(ISNUMBER($C1), $C1>5)
应用于范围G1:L1000
因此,从G1:L1000
的单个单元格的角度来看,该规则检查以下内容:
$C
列中的单元格值(总是固定在C
列中,因为此引用是固定的)是否在单个单元格所在的同一行中(因为行引用是相对的),数字且大于5?
在注释中,我建议将规则AND(ISNUMBER($C1), $C1>5, G1="")
应用于相同的范围G1:L1000
。 这与上述检查相同:
是存在单个单元格的G:L
列中的单个单元格(由于列引用是相对的,并不总是在G
列中),存在单个单元格的同一行(因为行引用是相对的),空(等于一个空字符串)?
现在您的实际需求:
“如果此范围内的任何单元格包含数字内容,则突出显示整个范围J1:P1000
”
函数COUNT
仅计数数字。 因此,如果J1:P1000
中的任何单元格包含数字,则COUNT($J$1:$P$1000)
将大于0。
所以
ConditionalFormattingRule rule = sheetCF.createConditionalFormattingRule("(COUNT($J$1:$P$1000)>0)");
应用于CellRangeAddress.valueOf("J1:P1000")
可以按需要工作。
从上看每个单元的单电池的COUNT
必须计算的整个范围。 这就是为什么$J$1:$P$1000
中的引用都是固定的而不是相对的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.