繁体   English   中英

Apache POI公式来检查范围中的任何单元都不为空

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM