Easypoi使用模板导出docx文档或excel表格详解
- **doc或docx文档的模板导出**
- **Excel的模板导出**
话不多说先上依赖
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-spring-boot-starter</artifactId>
<version>4.2.0</version>
</dependency>
对于响应头和文件名的设置,可以建一个工具类,把response和文件名传进去
//重置响应对象
response.reset();
// 指定下载的文件名--设置响应头
response.setHeader("Content-Disposition", "attachment;filename=" + fileName);
response.setContentType("application/octet-stream");
response.addHeader("Access-Control-Expose-Headers", "Content-Disposition");
response.addHeader("Access-Control-Allow-Headers", "Content-Disposition");
doc或docx文档的模板导出
为了整洁,就不加入重置响应对象和指定下载的文件名–设置响应头的代码了
List list = new ArrayList();
//准备数据,一个list对应一页doc的文档
for (int i = 0; i <= 100; i++){
Map<String, Object> map = new HashMap<>();
map.put("name", "xkx");
map.put("A", i);
map.put("B", i);
map.put("C", i);
list.add(map);
}
try {
//重置响应对象和指定下载的文件名--设置响应头
//将上方代码粘入
//....
//读取模板,放置数据,然后从response获取输出流导出
XWPFDocument doc = WordExportUtil.exportWord07("static/模板名.docx" , list);
doc.write(response.getOutputStream());
doc.close();
} catch (Exception e) {
e.printStackTrace();
}
exportWord07()的第一个参数为模板的相对地址,第二个参数为向模板中放置的数据
模板读取数据的形式为
一个list中的map对应的数据对应着一页文档的数据,有几个list就会生成几页文档
如果只需要一页,可以直接将map丢到第二个参数处
Excel的模板导出
List list = new ArrayList<Map<String, Object>>();
//数据准备
for (int i = 0; i <= 100; i++){
Map<String, Object> map = new HashMap<>();
map.put("name", "xkx");
map.put("A", i);
map.put("B", i);
map.put("C", i);
map.put("D", i);
list.add(map);
}
HashMap<String, Object> map = new HashMap<>();
map.put("list", list);
try {
//读取模板
TemplateExportParams params = new TemplateExportParams("static/处级干部 - 成绩统计表.xls");
//设置sheet名,以数组的形式,可多个
params.setSheetName(new String[]{"测试sheet名"});
//重置响应对象,指定下载的文件名--设置响应头
//将上方代码粘入
//.....
Workbook workbook = ExcelExportUtil.exportExcel(params, map);
workbook.write(response.getOutputStream());
workbook.close();
} catch (Exception e) {
e.printStackTrace();
}
exportExcel()的第一个参数为模板对象,第二个参数为数据
模板格式为
下面列举下EasyPoi支持的指令以及作用,最主要的就是各种fe的用法
- 空格分割
- 三目运算 {{test ? obj:obj2}}
- n: 表示 这个cell是数值类型 {{n:}}
- le: 代表长度{{le:()}} 在if/else 运用{{le:() > 8 ? obj1 : obj2}}
- fd: 格式化时间 {{fd:(obj;yyyy-MM-dd)}}
- fn: 格式化数字 {{fn:(obj;###.00)}}
- fe: 遍历数据,创建row
- !fe: 遍历数据不创建row
- $fe: 下移插入,把当前行,下面的行全部下移.size()行,然后插入
- #fe: 横向遍历
- v_fe: 横向遍历值
- !if: 删除当前列 {{!if:(test)}}
- 单引号表示常量值 ‘’ 比如’1’ 那么输出的就是 1
- &NULL& 空格
- ]] 换行符 多行遍历导出
- sum: 统计数据
导出结果如下
上面就是Easypoi使用模板导出文档或excel表格的方法了,有什么疑问欢迎提出