已解决 easypoi导出遇到的一些bug
springboot+vue一, 遇到的问题:问题一:java.lang.NoSuchMethodError:org.apache.poi.ss.usermodel.Cel1Style.setAlignment(S)V这个问题有两个方面需要调试:(1)pom文件中依赖的easypoi版本不兼容(2)pom文件依赖不全--详细的全部依赖后面会解释问题二:后台正常运行,返回数据给前端,之后前端数据乱码
springboot+vue
一, 遇到的问题:
问题一:java.lang.NoSuchMethodError:org.apache.poi.ss.usermodel.Cel1Style.setAlignment(S)V

这个问题有两个方面需要调试:
(1)pom文件中依赖的easypoi版本不兼容
(2)pom文件依赖不全 --详细的全部依赖后面会解释
问题二:后台正常运行,返回数据给前端,之后前端数据乱码解决
详细解决办法在下面第5条会解决
问题三: java.lang.IllegalArgumentException: lastRow < firstRow || lastCol < firstCol

这个问题大致是排序上有问题,但是,但是!!导入正确的包是不需要进行排序的!!千万不要导错包!!! 正确包为:
cn.afterturn.easypoi.excel.annotation.Excel;
1.首先pom依赖的相关文件

<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-base</artifactId>
<version>3.2.0</version>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-web</artifactId>
<version>3.2.0</version>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-annotation</artifactId>
<version>3.2.0</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.15</version>
</dependency>
2.实体类注解@Excel 所依赖的包
cn.afterturn.easypoi.excel.annotation.Excel; !!!!
注意实体类引入的其他包会不同类型的错(深刻教训)
3.dao层和service层就不用过多解释了
4.controller层

public void export(HttpServletRequest request, HttpServletResponse response, TbSerRec tbSerRec) {
QueryWrapper<TbSerRec> queryWrapper = new QueryWrapper<TbSerRec>();
queryWrapper.eq("bank_type", tbSerRec.getBankType());
if (tbSerRec.getBegin()!= null){
queryWrapper.between("create_time",tbSerRec.getBegin(),tbSerRec.getEnd());
}
List<TbSerRec> list = tbSerRecService.list(queryWrapper);
ExportParams exportParams = new ExportParams();
exportParams.setTitle("服务记录");
Workbook workbook = ExcelExportUtil.exportExcel(exportParams, TbSerRec.class, list);
response.setHeader("content-Type", "application/vnd.ms-excel");
response.setCharacterEncoding("UTF-8");
try {
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode("服务记录", "UTF-8") + ".xls");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
try {
workbook.write(response.getOutputStream());
} catch (IOException e) {
e.printStackTrace();
} finally {
if (workbook != null) {
try {
workbook.close();
} catch (IOException e) {
}
}
}
}
前面是根据plus查询的一些数据库数据,可以根据自己的查询方法进行改动,之后的代码直接拷贝就可以了,其中标题和依赖的实体类Class,因人而异进行修改
5.vue层
用ajax或者axios进行前后端交互的话前端响应到的数据会乱码
下面是可以正常交互的vue端代码

axios.get("/portal/tbSerRec/export",{
params:{
bankType : this.nameCode
},
headers: { 'Content-Type': 'application/json,charset=utf-8'},
responseType: 'arraybuffer', //二进制流
}).then(res => {
console.log(res);
let blob = new Blob([res], { type: 'application/vnd.ms-excel,charset=utf-8' });
let url =window.URL.createObjectURL(blob);
let link = document.createElement('a');
link.download = '服务记录.xlsx';
link.href = url;
link.click();
});
其中请求路径和参数因人而异进行,之后的代码只需要拷贝到对应的函数中即可
更多推荐



所有评论(0)