java 根据excel模板导出excel

由于项目需求,最近做了一个需要根据查询接口导出excel表格数据的需求

pom依赖:

     <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.16</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.16</version></dependency><dependency><groupId>net.sf.jxls</groupId><artifactId>jxls-core</artifactId><version>1.0.5</version></dependency>

excel模板如下:

模板存放的位置为resource目录下,创建了一个template目录,存放

后台接口:

public void export(@RequestHeader("Authorization") String token, @RequestParam("equipId") Long equipId,@RequestParam("year") Integer year, HttpServletRequest request, HttpServletResponse response) throws Exception {//根据查询条件获取查询数据List<EquipmentStatisticsNormRespVo> equipStatisticsList = equipmentStatisticsNormService.getEquipStatisticsList(equipId, year);// 循环数据List<Object> list = new ArrayList<>();equipStatisticsList.forEach(equipmentStatisticsNormRespVo -> {Map<String, Object> data = new HashMap<>();//数据处理data.put("yearly", equipmentStatisticsNormRespVo.getYearly() + "年");list.add(data);});// 表格使用的数据Map map = new HashMap();map.put("data", list);map.put("title", year + "年" + "导出数据");Date date = new Date();SimpleDateFormat simpl = new SimpleDateFormat("yyyyMMddHHmmss");String currntTime = simpl.format(date);//导出列表名String fileName = "导出数据" + "_" + currntTime;//生成的导出文件File destFile = File.createTempFile(fileName, ".xlsx");//transformer转到ExcelXLSTransformer transformer = new XLSTransformer();BufferedInputStream bis = null;BufferedOutputStream bos = null;try {InputStream resourceAsStream = this.getClass().getResourceAsStream("/template/equipmentStaticsNormTemplate.xlsx");XLSTransformer xlsTransformer = new XLSTransformer();Workbook workbook = xlsTransformer.transformXLS(resourceAsStream, map);OutputStream os = new BufferedOutputStream(new FileOutputStream(destFile));workbook.write(os);resourceAsStream.close();os.flush();os.close();//将文件输入InputStream inputStream = new FileInputStream(destFile);// 设置response参数,可以打开下载页面response.reset();//设置响应文本格式response.setContentType("application/vnd.ms-excel;charset=utf-8");response.setHeader("Content-Disposition", "attachment;filename=" + new String((fileName + ".xlsx").getBytes(), "iso-8859-1"));//将文件输出到页面ServletOutputStream out = response.getOutputStream();bis = new BufferedInputStream(inputStream);bos = new BufferedOutputStream(out);byte[] buff = new byte[2048];int bytesRead;// 根据读取并写入while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {bos.write(buff, 0, bytesRead);}} catch (ParsePropertyException e) {logger.debug("导出失败:{}", e.getMessage());} catch (InvalidFormatException e) {logger.debug("导出失败:{}", e.getMessage());} finally {//使用完成后关闭流try {if (bis != null)bis.close();if (bos != null)bos.close();} catch (IOException e) {logger.debug("导出失败:{}",e.getMessage());}}}

导出结果:

踩过得坑:
刚刚开始的时候,采用的获取模板的方式如下:

URL resource = this.getClass().getClassLoader().getResource("template/equipmentStaticsNormTemplate.xlsx");
String path = resource.getPath();

调用的方法如下:

 public void transformXLS(String srcFilePath, Map beanParams, String destFilePath) throws ParsePropertyException, IOException, InvalidFormatException {InputStream is = new BufferedInputStream(new FileInputStream(srcFilePath));org.apache.poi.ss.usermodel.Workbook workbook = transformXLS(is, beanParams);OutputStream os = new BufferedOutputStream(new FileOutputStream(destFilePath));workbook.write(os);is.close();os.flush();os.close();}

由于项目使用的前后端分离的,后端服务直接在 maven 构建后打包成 jar 包的方式部署发版,如上调用方法获取模板路径时,获取到的路径会变成file:/e:/.../ResourceJar.jar!/resource/template.xlsx ,注意此时的路径变成了 xxx.jar! 这样,导致后台服务在调用方法transformXLS 时,会出现文件路径错误找不到指定文件的错误。

java 根据excel模板导出excel相关推荐

  1. java 分析excel模板,java 根据excel模板导出excel

    java 根据excel模板导出excel 由于项目需求,最近做了一个需要根据查询接口导出excel表格数据的需求 pom依赖: org.apache.poi poi 3.16 org.apache. ...

  2. 使用EasyPoi利用excel模板导出excel表格下载

    前言:使用excel模板导出excel的好处在于可以事先在模板上定义颜色.格式等,适用于模板设计得比较灵活复杂的场景 一.添加jar包 <dependency><groupId> ...

  3. .Net NPOI 根据excel模板导出excel、直接生成excel

    一.根据Excel模板导出excel 1.导入NPOI.dll  2.DAL中添加类ExportExcel.cs using NPOI.SS.UserModel; using System; usin ...

  4. springboot+poi开发excel导出 加载Excel模板导出 Excel批量导出详解

    提到Excel导出功能,可能很多人都使用springmvc框架做过,笔者今天要给大家分享的是基于springBoot开发Excel复杂模板导出功能(所谓复杂模板指在模板里的特定表头里有不同的单元格合并 ...

  5. java easypoi使用模板导出Excel,合并单元格

    工作几年,每年都有java数据导出Excel的需求,从最初的POI到公司封装的工具再到阿里的EasyExcel.总是有这个那个的小痛点,最近发现easypoi比较满足工作需求,可以很好的导出数据并处理 ...

  6. Java 根据Excel模板 导出Excel报表

    工作中肯定会有的报表导出的功能,咱先来理下思路 先定义好模板文件,存放到一个有权限访问的目录内 根据模板路径,获取模板文件 /*** 根据模板的路径获取模板文件对象* classpath根目录下:/t ...

  7. thinkphp6 生成下载动态Excel模板,导出excel文件

    1,安装 phpexcel composer require phpoffice/phpexcel 安装成功后,vendor文件夹下会有phpoffice文件夹 2,common.php 中加入导出e ...

  8. freemarker根据word模板导出动态word(Excel模板导出Excel)

    1.创建word模板 将需要替换的位置用"${}"代替,如下图: 2.将做好的模板文件保存为xml文件 3.打开xml文件,查看"${unitName}"是否在 ...

  9. .Net Core 读取Excel 模板 导出 Excel 文件

    var exportTemplatePath = "./Template/cxtemplate.xlsx";var newName = $"xxx进度表汇总-{Syste ...

最新文章

  1. spring cloud gateway之服务注册与发现
  2. 学习Knowledge Graph Embedding Based Question Answering代码笔记
  3. java虚拟机 第二章Java内存区域与内存溢出异常
  4. mysql驱动profilesql_java连接mysql的驱动配置问题
  5. 2021汽车产业数字化转型白皮书-腾讯研究院.pdf(附下载链接)
  6. Python2.7-异常和工具
  7. ESP8285如何做探针盒子
  8. 内蒙古自治区包头市谷歌高清卫星地图下载
  9. HTML学习(三):排版
  10. 如何利用软文营销将好品牌故事?
  11. ubuntu系统安装记录
  12. 活着的意义--读《此生未完成》有感
  13. Linux修改网卡地址(临时/永久)
  14. html5新浪微博代码,JS实现的新浪微博大厅文字内容滚动效果代码
  15. Amazon Alexa通过云控制Bluetooth Mesh设备
  16. matlab求解一元四次函数,excel数据函数参数是四个吗|求一个简单的一元四次函数的最大值...
  17. 原理探究:Spring @Value注解详解
  18. c语言程序设计常用思维,C语言程序设计中计算思维的思考①
  19. 杨国福冲刺香港上市:加盟店风险事件频现,杨氏家族已“套现”1亿元
  20. python hadoop wordcount_Hadoop之wordcount实例-MapReduce程序

热门文章

  1. Swing GUI 案例 - 3. 程序组织 原则和技巧
  2. 让linux挂载的移动硬盘具有执行权限
  3. 父元素和子元素外边距重合
  4. chi2inv函数 matlab_matlab常用命令
  5. SDUTOJ3112-小鑫的爱情故事
  6. 省电信上层封UDP封海外高防IP段:59.56.66.*;适用于游戏、网站、小程序、APP、区块链、视频、直播、媒体等业务
  7. 图数据库-Neo4j(五):利用Apoc进行数据的导入、导出【Neo4j插件】【csv格式、json格式、Cypher脚本】
  8. python爬虫用什么软件写_python用什么软件写爬虫
  9. 百度糯米 php 面试题,百度糯米php笔试题.doc
  10. 谷粒商城电商项目 高可用集群篇