【发布时间】:2023-03-16 19:30:01
【问题描述】:
我正在使用 Apache POI,使用条件格式。我希望能够编写一个公式,例如 - 如果指定范围内的任何列不是数字,则突出显示所有列。我正在尝试使用公式 - ISNUMBER($J1:P1000)。但这不起作用。
ConditionalFormattingRule rule = sheetCF.createConditionalFormattingRule("ISNUMBER($J1:P1000))");
如果我尝试只使用带有公式的单个单元格 - ISNUMBER($J1) 它可以工作。但是我想要条件,如果从 J 到 P 的任何单元格是一个数字,然后做一些突出显示。
此线程中给出了基于某些规则突出显示某些单元格的代码的详细信息,因此不再重复-Apache POI - Conditional formatting - need to set different cell range for rule and formatting
【问题讨论】:
-
您似乎不了解 CF 的工作原理。
ConditionalFormattingRule rule = sheetCF.createConditionalFormattingRule("NOT(ISNUMBER(J1))");应用于CellRangeAddress.valueOf("J1:P1000")匹配CellRangeAddress中满足规则的所有单元格。这是因为规则中的某处没有$,因此列字母和行号是相对的而不是固定的。 -
我了解当 ISNUMBER(J1) 应用于 CellRangeAddress.valueOf("J1:P1000") 时,它匹配此范围内的任何单元格,并且只为匹配的单元格着色。但我希望当此范围内的任何单元格匹配时,为从 J 到 P 的所有单元格着色。
-
我认为使用 CF 是不可能的。你能在
Excel的GUI 中创建那个CF 吗?如果没有,那么apache poi也不能这样做。 -
从角度来看,应用于
CellRangeAddress.valueOf("J1:P1000")的单个单元格ConditionalFormattingRule rule = sheetCF.createConditionalFormattingRule("(COUNT($J$1:$P$1000)>0)");可以随心所欲地工作。COUNT只计算数字。所以如果J1:P1000中的任何一个单元格包含一个数字,count就会大于0。请尝试。 -
谢谢 Axel,这正是我想要的。但我并不完全理解 $J$1:$P$1000。据我了解,$J 是 J 列中的特定条目,只有 J(不带 $)是相对的,适用于 CellRangeAddress 中的所有单元格。 $J$1 是什么意思?
标签: java excel apache-poi