如何在转换后的JXLS API模板中动态合并单元格

11

我正在使用Jxls API

现在,我可以创建并传递数据列表到模板中,从而按照需要创建Excel输出表格。

但是,现在我需要合并具有相同值的列单元格。

这是我的循环标签,用于重复单元格:

<jx:forEach items="${dummyData}" var="dummy" groupBy="col1">
<jx:forEach items="${group.items}" var="myList123">
${myList123.col1} ${myList123.col2} ${myList123.col3} ${myList123.col4} ${myList123.col5} ${myList123.col6} ${myList123.col7}
</jx:forEach>
</jx:forEach>

我有什么

我想要什么


嘿!你找到解决问题的方法了吗? - letalumil
“合并”是什么意思?你能举个例子吗?由于你有很多列,这里的“合并”可能有很多含义... - Gi1ber7
2个回答

6

我不确定这样做是否有帮助,但这是我的想法:

  1. 生成像您上面展示的文件,然后保存该文件
  2. 使用apache POI重新加载文件,然后实现您的逻辑以合并所需的单元格。POI具有以下功能,我已经使用过:

您可以使用POI库中的sheet.addMergedRegion(rowFrom,rowTo,colFrom,colTo);

我从未使用过Jxlx,但看起来它们没有此功能。


3
我制作了一个自定义的命令来进行自动合并操作。但需要注意我使用的是org.jxls:jxls:2.4.2org.jxls:jxls-poi:1.0.13,并且有一个主子数据结构(这意味着数据已经按照某种规则进行了分组)。 您可以从下面的图片中查看模板和渲染结果: enter image description here 代码示例:
public void xls() throws Exception {
  // from template
  InputStream template = getClass().getClassLoader().getResourceAsStream("templates/each-merge.xls");

  // output to
  File out = new File("target/each-merge-result.xls");
  if (out.exists()) out.delete();
  OutputStream output = new FileOutputStream(out);

  // template data
  Map<String, Object> data = generateData();

  // render
  JxlsUtils.renderTemplate(template, data, output);

  // verify
  assertThat(out.exists(), is(true));
  assertThat(out.getTotalSpace() > 0, is(true));
}

你可以从github项目中获取源代码simter-jxls-ext。测试类是EachMergeCommandTest.java
数据结构如下:
[
  {
    sn: 1, 
    name: 'row1',
    subs: [
      {sn: '1-1', name: 'row1sub1'},
      ...
    ]
  },
  ...
]

希望这个对你有帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接