当前位置: 首页 > 后端技术 > Java

如何使用FTP和EasyPOI中的模板文件导出Excel?

时间:2023-04-02 01:56:54 Java

问题描述因为工作需要导出Excel文件,使用的技术是EasyPOI,EasyPOI是一个非常好的导出文件的工具,官网提供了非常详细的文档,在项目中使用了EasyPOI的模板导出功能。在官方提供的示例代码中,模板的路径是本地的。我用的时候也是把Excel模板文件放在本地,因为之前需要导出的地方不多,而且模板文件也是本地的。没什么大问题,但是现在由于需求的变化,会有大量的模板需要导出,如果放在本地的话,项目容量会增加。现在想把导出的模板保存到远程FTP服务中,EasyPOI读取FTP中的模板文件生成Excel文件。解决步骤1.找到解决方案。在网上找了很多相关资料,但是在官网上没有找到解决方法。不小心翻到了一篇文章。文中提到了一句话,说EasyPOI读取模板文件,只支持读取本地模板文件,也就是说,我只需要将FTP中的模板文件下载到本地指定的路径下,就可以读取模板文件了。2、创建测试项目创建一个SpringBoot项目,在POM文件中引入需要的Jar包,如下cn.hutoolhutool-all5.7.5cn.afterturneasypoi-spring-boot-starter4.3.0commons-netcommons-net3.63.添加一些配置文件ftp:host:192.168.2.2#IPport:21#portusername:root#usernamepassword:123456#passwordmode:Passive#ftpmoderemotePath:/root/export/#ftp模板路径localPath:/Users/simonxue/Developer/Temp/#本地模板路径template:employee:employee.xlsx#模板文件3.创建一个FTP下载方法,返回地址模板的全路径名,如下图@Value("${ftp.host}")privateStringhost;@Value("${ftp.port}")privateIntegerport;@Value("${ftp.username}")privateStringusername;@Value("${ftp.password}")privateStringpassword;@Value("${ftp.mode}")privateStringmode;@Value("${ftp.remotePath}")privateStringremotePath;@Value("${ftp.localPath}")privateStringlocalPath;/***将FTP中的文件复制到本地*@paramfileNameftp中的文件名*@return*/@SneakyThrowspublicStringlocalPathName(StringfileName){Ftpftp=newFtp(host,port,username,password,Charset.defaultCharset());ftp.setMode(FtpMode.Passive.name().equals(mode)?FtpMode.Passive:FtpMode.Active);StringlocalName=localPath+fileName;ftp.download(remotePath,fileName,FileUtil.file(localName));ftp.close();returnlocalName;}4.根据需要导出的地方模板,使用上面的方法,如下@SneakyThrows@OverridepublicvoidtemplateTest(HttpServletResponseresponse){StringlocalPathName=ftpUtil.localPathName(employeeTemplateName);response.setCharacterEncoding("utf-8");response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");response.setHeader("Content-Disposition","attachment;filename="+IdUtil.getSnowflake(0,0).nextIdStr()+".xlsx");MapresultMap=newHashMap<>();ListemployeeList=newArrayList<>();Employeeemployee=newEmployee();employee.setJobNumber("0001");employee.setUsername("小码农薛尧");employee.setPhone("1234567901");employee.setEmail("xueyao.me@gmail.com");employeeList.add(employee);List>maps=employeeList.stream().map(a->{Mapmap=BeanUtil.beanToMap(a);returnmap;}).collect(Collectors.toList());resultMap.put("employees",maps);//此需要指定模板路径TemplateExportParamsparams=newTemplateExportParams(localPathName,"test");Workbookworkbook=ExcelExportUtil.exportExcel(params,resultMap);workbook.write(outputStream);outputStream.close();}5.运行代码,生成的文件汇总如下。EasyPOI不提供读取远程模板文件,但我们可以通过其他方式实现。Excel的格式和样式下次会改,我们可以直接在FTP中调整模板文件,无需重新部署项目项目代码已经存放在Github上的链接地址