java 根据excel模板导出excel
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相关推荐
- java 分析excel模板,java 根据excel模板导出excel
java 根据excel模板导出excel 由于项目需求,最近做了一个需要根据查询接口导出excel表格数据的需求 pom依赖: org.apache.poi poi 3.16 org.apache. ...
- 使用EasyPoi利用excel模板导出excel表格下载
前言:使用excel模板导出excel的好处在于可以事先在模板上定义颜色.格式等,适用于模板设计得比较灵活复杂的场景 一.添加jar包 <dependency><groupId> ...
- .Net NPOI 根据excel模板导出excel、直接生成excel
一.根据Excel模板导出excel 1.导入NPOI.dll 2.DAL中添加类ExportExcel.cs using NPOI.SS.UserModel; using System; usin ...
- springboot+poi开发excel导出 加载Excel模板导出 Excel批量导出详解
提到Excel导出功能,可能很多人都使用springmvc框架做过,笔者今天要给大家分享的是基于springBoot开发Excel复杂模板导出功能(所谓复杂模板指在模板里的特定表头里有不同的单元格合并 ...
- java easypoi使用模板导出Excel,合并单元格
工作几年,每年都有java数据导出Excel的需求,从最初的POI到公司封装的工具再到阿里的EasyExcel.总是有这个那个的小痛点,最近发现easypoi比较满足工作需求,可以很好的导出数据并处理 ...
- Java 根据Excel模板 导出Excel报表
工作中肯定会有的报表导出的功能,咱先来理下思路 先定义好模板文件,存放到一个有权限访问的目录内 根据模板路径,获取模板文件 /*** 根据模板的路径获取模板文件对象* classpath根目录下:/t ...
- thinkphp6 生成下载动态Excel模板,导出excel文件
1,安装 phpexcel composer require phpoffice/phpexcel 安装成功后,vendor文件夹下会有phpoffice文件夹 2,common.php 中加入导出e ...
- freemarker根据word模板导出动态word(Excel模板导出Excel)
1.创建word模板 将需要替换的位置用"${}"代替,如下图: 2.将做好的模板文件保存为xml文件 3.打开xml文件,查看"${unitName}"是否在 ...
- .Net Core 读取Excel 模板 导出 Excel 文件
var exportTemplatePath = "./Template/cxtemplate.xlsx";var newName = $"xxx进度表汇总-{Syste ...
最新文章
- spring cloud gateway之服务注册与发现
- 学习Knowledge Graph Embedding Based Question Answering代码笔记
- java虚拟机 第二章Java内存区域与内存溢出异常
- mysql驱动profilesql_java连接mysql的驱动配置问题
- 2021汽车产业数字化转型白皮书-腾讯研究院.pdf(附下载链接)
- Python2.7-异常和工具
- ESP8285如何做探针盒子
- 内蒙古自治区包头市谷歌高清卫星地图下载
- HTML学习(三):排版
- 如何利用软文营销将好品牌故事?
- ubuntu系统安装记录
- 活着的意义--读《此生未完成》有感
- Linux修改网卡地址(临时/永久)
- html5新浪微博代码,JS实现的新浪微博大厅文字内容滚动效果代码
- Amazon Alexa通过云控制Bluetooth Mesh设备
- matlab求解一元四次函数,excel数据函数参数是四个吗|求一个简单的一元四次函数的最大值...
- 原理探究:Spring @Value注解详解
- c语言程序设计常用思维,C语言程序设计中计算思维的思考①
- 杨国福冲刺香港上市:加盟店风险事件频现,杨氏家族已“套现”1亿元
- python hadoop wordcount_Hadoop之wordcount实例-MapReduce程序
热门文章
- Swing GUI 案例 - 3. 程序组织 原则和技巧
- 让linux挂载的移动硬盘具有执行权限
- 父元素和子元素外边距重合
- chi2inv函数 matlab_matlab常用命令
- SDUTOJ3112-小鑫的爱情故事
- 省电信上层封UDP封海外高防IP段:59.56.66.*;适用于游戏、网站、小程序、APP、区块链、视频、直播、媒体等业务
- 图数据库-Neo4j(五):利用Apoc进行数据的导入、导出【Neo4j插件】【csv格式、json格式、Cypher脚本】
- python爬虫用什么软件写_python用什么软件写爬虫
- 百度糯米 php 面试题,百度糯米php笔试题.doc
- 谷粒商城电商项目 高可用集群篇