jxls 2.0条件格式forumla每行不更新

cunj1qz1  于 2021-06-30  发布在  Java
关注(0)|答案(2)|浏览(248)

尝试创建jxls excel模板,在该模板中可以将条件格式从特定行上的单元格复制到下一个生成的行。
在模板中,我创建了格式。如果单元格中的值等于“是”,则该行应为红色。
模板

条件格式

Formula: =$B2="yes"
Applies to: $A$2:$B$2


我知道这个公式适用于已经填充的excel表这里是一个例子https://trumpexcel.com/highlight-rows-based-on-cell-value/
但是,当我用excel模板和jxls2.0执行此操作时,它失败了。它将公式原样复制到每个新生成的行。因此,不再是整个工作表的一个条件,而是现在有多少行就有多少行。这里的问题是它将按原样复制它,这意味着每个条件下的公式都将基于单元格c2中的值。因此,即使单元格c3生成的值为“no”,它也将是红色的,因为它基于c2中的值。
输出excel

条件格式化输出excel

关于如何在模板中直接解决这个问题,有什么建议吗?
使用jxls 2.9.0 jxls poi 2.9.0

jvidinwx

jvidinwx1#

一种方法是修改模板中的公式以得到我们想要的结果。
配方: =INDIRECT("$B" & ROW())="yes" 说明: ROW() 返回当前行号。 "$B" & ROW() 提供单元格引用。例如,在第5行,我们将得到 B5 最后,使用 INDIRECT(...) 我们在单元格引用处获取值并检查是否为“是”。
输出excel:

4jb9z9bj

4jb9z9bj2#

你所经历的是标准的excel行为。为了达到你想要的,你有两个选择:使用常规范围或动态表。我会用后者。
使用常规范围
您至少需要从以下两行开始:

然后只在第一行之后和最后一行之前插入行。从不在第一个之前或最后一个之后。新行采用相同的格式,因为基础范围正在扩展。例如,在两行之间插入4行将导致:

使用动态表
假设有标题(不需要),请选择开始区域,然后将其格式化为表格:

您可以通过将出现的对话框中的复选框选择表是否有标题。
然后添加相同的条件格式:

现在的区别是,添加新行时,条件格式将自动展开。表本身会自动展开,因此其他所有操作(格式化、验证、公式等)都会随之展开。
只需确保为下的表启用了“自动展开”选项 File/Options/Proofing/AutoCorrect Options/AutoFormat As You Type/Include new rows and columns in table . 你也可以通过编程来实现(我知道在vba中你需要设置 Application.AutoCorrect.AutoExpandListRange 为真)。顺便说一下,默认值为true。
不管你的表有多大,格式都会被扩展。

相关问题