java导出word文档乱码(导出word文档案例)

时刻小站 169

无疫情学校要开展线下教学无疫情的地方也恢复到正常的生活,所以今天也要正常增加新的知识。

java导出文件是每个系统必不可少的,导出一般会导出文件或者excel表格,以导出excel表格为例:

一:自定义导出

第一:controller层

value中的名字是自定义的,在controller层写之前要建好query和service层和vo层,如果不知道上述是什么意思,请再学习一下springMvc ,在这就不一一赘述。

@PostMapping(value ="expoet")@ApiOperation(value ="导出", notes ="导出", produces = MediaType.APPLICATION_JSON_VALUE) public void export(@RequestBodyTestQuery query, HttpServletResponse response) throws IOException {TestService.export(query, response); }

第二:service层里的方法

/** * *导出 * **/voidexport(TestQuery query, HttpServletResponse response)throws IOException;

​第三:impl层

实体类,在这用到的 getExcelOutputStream()是自己封装的方法,后面加文件名和格式

@Overridepublic void export(TestQuery query, HttpServletResponse response) throws IOException {//设置返回文件名称和格式getExcelOutputStream("导出表", response);if(CollectionUtils.isNotEmpty(query)) {try(OutputStream outputStream = response.getOutputStream()) {EasyExcel.write(outputStream, TestVo.class).sheet("导出表").doWrite(query); }catch(IOException e) {thrownewRuntimeException(e); } } }

第四:getExcelOutputStream()方法,主要解决用utf-8返回防止乱码

/** * 导出文件时为Writer生成OutputStream *@paramfileName: 文件名称 *@paramresponse: */publicstaticvoidgetExcelOutputStream(String fileName, HttpServletResponse response)throwsIOException{try{ fileName = URLEncoder.encode(fileName,"UTF-8"); response.setContentType("application/vnd.ms-excel"); response.setCharacterEncoding("utf8"); response.setHeader("Content-Disposition","attachment; filename="+ fileName +".xlsx"); response.setHeader("Pragma","public"); response.setHeader("Cache-Control","no-store"); response.addHeader("Cache-Control","max-age=0");// response.setHeader("content-Type", "application/vnd.ms-excel");}catch(IOException e) {thrownewIOException("导出excel表格失败!", e); } }

第五:vo层 这里是自定义的实体类(TestVo),导出的字段要加一个注释

@ExcelProperty(value ="名称")privateString name;

​这样用postman调用就可以生成excel表格了。

二:用固定模板导出

此方法是先在minio上导入excel模板,之后再nacos上导入url;

(这块主要讲代码的开发)

第一,第二步还是新建controller层 和 一.1/一.2一样

第三:impl层,写具体的实现类,exportRecycleReords()是要得出的结果,比如要输出哪个字段,或者求和之类的都在此方法中写。尤其要说明一下reportUrl是在nacos上导入的url的自命名。记得在方法的上面引入此Url

@Value("${global.import_file.reportUrl:}")privateString reportUrl;@OverridepublicvoidexportRecycle(HttpServletResponse response, BsRecycleRecordsQuery query){ List recycleRecordsVoList = exportRecycleReords(query);try(InputStream excelInputStream = HttpUtil.getExcelInputStream(reportUrl);) { HttpUtil.getExcelOutputStream("记录", response);//设置输出流和模板信息ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).withTemplate(excelInputStream).build(); WriteSheet writeSheet = EasyExcel.writerSheet().build();//开启自动换行,自动换行表示每次写入一条list数据是都会重新生成一行空行,此选项默认是关闭的,需要提前设置为trueFillConfig fillConfig = FillConfig.builder().forceNewRow(Boolean.TRUE).build(); excelWriter.fill(recycleRecordsVoList, fillConfig, writeSheet); excelWriter.finish(); }catch(IOException e) {thrownewBusinessException("获取导出模版失败"); } }

这样就可以根据模板导出了 ,模板使用于财务报表之类的字段繁多且麻烦的表格。

上一篇:

下一篇:

  同类阅读

分享