JXLS 2.0 条件格式论坛未按行更新

JXLS 2.0 Conditional Formatting Forumla not updated per row

正在尝试创建 JXLS excel 模板,其中应该可以将条件格式从特定行的单元格复制到下一个生成的行。

在模板中,我创建了格式。如果单元格中的值等于“是”,则该行应为红色。

模板

条件格式

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

我知道这个公式适用于已经填充的 excel sheet 这是一个例子 https://trumpexcel.com/highlight-rows-based-on-cell-value/

但是当我使用我的 excel 模板和 JXLS 2.0 执行此操作时,它失败了。它将公式原样复制到每个新生成的行。因此,整个 sheet 不再是一个条件,现在有多少行就有多少。这里的问题是它将按原样复制,这意味着每个条件中的公式将基于单元格 C2 中的值。因此,即使生成的单元格 C3 的值为“否”,它也会是红色的,因为它基于 C2 中的值。

输出excel

条件格式化输出excel

关于如何直接在模板中解决这个问题的任何提示?

使用 jxls 2.9.0 jxls-poi 2.9.0

一种方法是修改模板中的公式来实现我们想要的。

公式: =INDIRECT("$B" & ROW())="yes"

描述:

  1. ROW() returns 当前行号。
  2. "$B" & ROW() 给出单元格引用。例如,在第 5 行,我们将得到 B5
  3. 最后,使用 INDIRECT(...) 我们获取单元格引用的值并检查是否为“是”。

输出excel:

您遇到的是标准 Excel 行为。为了实现您想要的效果,您有 2 个选择:使用常规范围或动态范围 table。我会使用后者。

使用常规范围

您需要至少从 2 行开始:

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

使用动态 table

假设你有 headers(你不需要),你 select 你的起始范围,然后将其格式化为 table:

您可以通过将出现的对话框中的复选框来选择 table 是否具有 headers。

然后添加相同的条件格式:

现在的不同之处在于,当您添加新行时,条件格式会自动展开。 table 本身会自动扩展,因此其他所有内容(格式、验证、公式等)都会随之扩展。

只需确保您在 File/Options/Proofing/AutoCorrect Options/AutoFormat As You Type/Include new rows and columns in table 下的 table 秒内启用了自动扩展选项。您也可以通过编程方式执行此操作(我知道在 VBA 中您需要将 Application.AutoCorrect.AutoExpandListRange 设置为 True)。顺便说一下,默认值是 True。

无论您的 table 有多大,您都会扩展格式。