springboot使用easypoi通过使用模板导出文件
第一步:导入poi以及easypoi的maven坐标
首先,easypoi是依赖于Apache的poi实现的,因此需要先引入poi
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>4.1.2</version>
</dependency>
<!--xlsx格式excel依赖包-->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-base</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-web</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-annotation</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-spring-boot-starter</artifactId>
<version>4.4.0</version>
</dependency>
第二步:确认文件模板存放地址
本人是放在resource 文件下
personList 为 集合为集合名称 t.projectName t 为固定写法,projectName 为集合的具体字段
以下就是模板常用的指令:
空格分割
三目运算 {{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& 空格
&INDEX& 表示循环中的序号,自动添加
]] 换行符 多行遍历导出
sum: 统计数据
cal: 基础的±X% 计算
dict: 字典
i18n: 国际化
第三步:实际业务代码
controller层
/***
* @param planId
* @param response 响应头
*/
@GetMapping("export")
public void export(@RequestParam Long planId, HttpServletResponse response) {
planService.export(planId, response);
}
serviceImpl 层
String title = name + "一房一价.xlsx";
try {
TemplateExportParams templateExportParams = new TemplateExportParams("template/abc.xlsx");
Map<String,Object> map = new HashMap<>();
map.put("personList",excelList);
response.setHeader("Content-Disposition",
"attachment;filename=" + new String(title.getBytes("UTF-8"), "iso8859-1"));
response.setContentType("application/vnd.ms-excel;charset=UTF-8");
response.setHeader("Pragma", "no-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires", 0);
BufferedOutputStream bufferedOutPut = new BufferedOutputStream(response.getOutputStream());
Workbook workbook = ExcelExportUtil.exportExcel(templateExportParams, map);
workbook.write(bufferedOutPut);
bufferedOutPut.flush();
bufferedOutPut.close();
workbook.close();
}catch (Exception e){
e.printStackTrace();
}
ps 异常处理
由于文件是放在resource 文件下,在liux系统上是jar包形式,可能在实际生成中导出会报错。
处理方法:在pom 里面加入
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.6</version>
<configuration>
<encoding>UTF-8</encoding>
<nonFilteredFileExtensions>
<nonFilteredFileExtension>xlsx</nonFilteredFileExtension>
<nonFilteredFileExtension>pdf</nonFilteredFileExtension>
<nonFilteredFileExtension>docx</nonFilteredFileExtension>
</nonFilteredFileExtensions>
</configuration>
</plugin>
</plugins>
</build>
即解决