Java JXLS 2.0未按行更新UMLA的条件格式

Java JXLS 2.0未按行更新UMLA的条件格式,java,excel,apache-poi,jxls,Java,Excel,Apache Poi,Jxls,尝试创建JXLS excel模板,在该模板中可以将条件格式从特定行上的单元格复制到生成的下一行 在模板中,我创建了我的格式。如果单元格中的值等于“是”,则该行应为红色 模板 条件格式 Formula: =$B2="yes" Applies to: $A$2:$B$2 我知道这个公式适用于已经填充的excel表格,这里是一个例子 但当我使用excel模板和JXLS2.0执行此操作时,它失败了。它将公式原样复制到每个新生成的行。因此,不是整个工作表的一个条件,而是现在将有尽

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

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

模板

条件格式

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

我知道这个公式适用于已经填充的excel表格,这里是一个例子

但当我使用excel模板和JXLS2.0执行此操作时,它失败了。它将公式原样复制到每个新生成的行。因此,不是整个工作表的一个条件,而是现在将有尽可能多的行。这里的问题是它将按原样复制,这意味着每个条件下的公式都将基于单元格C2中的值。因此,即使生成的单元格C3的值为“否”,它也将为红色,因为它基于C2中的值

输出excel

条件格式化输出excel

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

使用 jxls 2.9.0
jxls poi 2.9.0

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

公式:
=间接(“$B”&ROW())=“是”

说明:

  • ROW()
    返回当前行号
  • “$B”和ROW()
    提供单元格引用。例如,在第5行,我们将得到
    B5
  • 最后,使用
    间接(…)
    我们得到单元格引用处的值,并检查是否为“是”

  • 输出excel:

    您正在体验的是标准的Excel行为。为了达到您想要的效果,您有两种选择:使用常规范围或动态表。我会用后者

    使用常规范围

    您需要至少从以下两行开始:

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

    使用动态表格

    假设您有标题(您不需要),您可以选择开始范围,然后将其格式化为表格:

    通过将出现的对话框中的复选框,您可以选择表格是否有标题

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

    现在的区别是,添加新行时,条件格式将自动展开。表格本身会自动展开,因此其他所有操作(格式化、验证、公式等)都会随之展开

    只需确保在表中键入/包括新行和新列时,在“文件/选项/校对/自动更正选项/自动格式化”下为表启用了“自动展开”选项。您也可以通过编程实现(我知道在VBA中,您需要将
    Application.AutoCorrect.AutoExpandListRange
    设置为True)。顺便说一下,默认值为True

    无论您的表有多大,您都将扩展格式


    那么好的作品就像一种魅力!谢谢