已解决 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)