easyexcel 根据模版数据withTemplate 追加列和数据
时间: 2024-03-06 09:50:28 浏览: 357
在 EasyExcel 中,可以通过 `com.alibaba.excel.EasyExcelFactory` 的 `read(InputStream inputStream, Class head, ReadListener readListener)` 方法读取 Excel 文件,并通过 `com.alibaba.excel.EasyExcelFactory` 的 `write(OutputStream outputStream, WriteSheet writeSheet)` 方法将数据写出到 Excel 文件中。同时,EasyExcel 还提供了 `withTemplate(InputStream templateInputStream)` 方法,可以加载一个 Excel 模板文件,然后将数据写入到模板文件中。因此,我们可以根据模板文件追加新的列和数据。具体代码如下:
```java
// 加载模板文件
try (InputStream templateInputStream = new FileInputStream("template.xlsx")) {
// 构造数据
List<User> list = new ArrayList<>();
// ... 添加数据 ...
// 读取模板文件
ExcelReader reader = EasyExcelFactory.read(templateInputStream).build();
Sheet sheet = reader.getSheets().get(0);
// 获取表头信息
List<List<String>> head = sheet.getHead();
// 添加新的列名
head.get(0).add("新列名");
// 添加每一行对应的数据
for (int i = 0; i < list.size(); i++) {
User user = list.get(i);
List<Object> rowData = new ArrayList<>(head.size());
rowData.addAll(sheet.getRow(i + 1));
rowData.add("新列数据" + i);
sheet.addRow(rowData);
}
// 写出数据
OutputStream out = new FileOutputStream("output.xlsx");
ExcelWriter writer = EasyExcelFactory.write(out).withTemplate(templateInputStream).build();
writer.write(list, sheet);
writer.finish();
}
```
其中,`User` 是自定义的数据类型,`template.xlsx` 是模板文件名,`output.xlsx` 是输出文件名。我们首先加载模板文件,构造数据,并使用 `EasyExcelFactory` 的 `read()` 方法读取模板文件。接着,我们获取模板文件中的 `Sheet` 对象,并获取表头信息,将新的列名添加到表头中。然后,我们遍历每一行数据,分别获取该行的数据,再添加一个新的数据到该行数据的末尾,使用 `Sheet` 对象的 `addRow()` 方法将修改后的行数据追加到表格中。最后,我们使用 `EasyExcelFactory` 的 `write()` 方法将数据写出到输出流中,并指定模板文件为模板。
阅读全文