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>

我有的

我想要的是

4

2 回答 2

5

我不确定这是否会有所帮助。但这是我的想法

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

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

我从来没有在 Jxlx 上工作过,但看起来他们没有这个功能。

于 2017-05-19T21:37:23.667 回答
2

我做了一个自定义jx:each-merge命令来做自动合并的事情。但需要注意的是,我使用的是org.jxls:jxls:2.4.2org.jxls:jxls-poi:1.0.13并且有一个主子数据结构(意味着数据已经被分组了)。您可以从下面的图片中看到模板和渲染结果: 在此处输入图像描述

代码示例:

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'},
      ...
    ]
  },
  ...
]

希望这会有所帮助。

于 2017-12-01T08:59:14.443 回答