java 根据excel模板导出excel

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

pom依赖:

org.apache.poi

poi

3.16

org.apache.poi

poi-ooxml

3.16

net.sf.jxls

jxls-core

1.0.5

excel模板如下:

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

后台接口:

public void export(@RequestHeader("Authorization") String token, @RequestParam("equipId") Long equipId,

@RequestParam("year") Integer year, HttpServletRequest request, HttpServletResponse response) throws Exception {

//根据查询条件获取查询数据

ListequipStatisticsList = equipmentStatisticsNormService.getEquipStatisticsList(equipId, year);

// 循环数据

Listlist = new ArrayList<>();

equipStatisticsList.forEach(equipmentStatisticsNormRespVo -> {

Mapdata = 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转到Excel

XLSTransformer 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模板,java 根据excel模板导出excel相关推荐

  1. springboot使用jxls导出excel___(万能通用模板)--- SpringBoot导入、导出Excel文件___SpringBoot整合EasyExcel模板导出Excel

    springboot使用jxls导出excel 实现思路: 首先在springBoot(或者SpringCloud)项目的默认templates目录放入提前定义好的Excel模板,然后在具体的导出接口 ...

  2. php导出excel格式文件,PHP导入与导出Excel文件的方法

    一.PHP导出Excel文件 1,推荐phpexcel,官方网站: http://www.codeplex.com/PHPExcel 导入导出都成,可以导出office2007格式,同时兼容2003 ...

  3. (万能通用模板)--- SpringBoot导入、导出Excel文件

    先把项目的demo发一下,看完文章可以看一下,demo 前言:最近做项目过程中使用到了一个权限管理框架:若依,使用过程中发现他的文件导入和导出功能非常的实用,在这里特此做一个小demo跟大家分享一下. ...

  4. java控制台输出五行字符串_java五行代码导出Excel

    已经写过两种Excel导出插件了.今天再安利一个极简的导出Excel的框架,导出无特殊格式要求的Excel,只需五行代码: 先看代码 再看效果 EasyExcel 本案例用到的框架是阿里推出的Easy ...

  5. java jxl创建多个sheet,使用jxl导出excel时怎么创建多个sheet | 学步园

    虽然知道excel导出可能会出现要记录要分多个sheet的情况,但迄今为止还是没有遇到过,今天有空试了一把 export try{ 查询开始/// Class.forName("oracle ...

  6. java swing 导出文件_java swing (一) 导出excel文件并打开

    点击XXX管理系统中的"导出Excel"按钮,然后弹出如上图,点击"保存"以后,该Excel就保存到指定路径,并且打开. 上述的动作,其实不难,主要是打开该文件 ...

  7. java excel中重复数据 事务处理_Java导出excel时合并同一列中相同内容的行思路详解...

    一.有时候导出Excel时需要按类别导出,一大类下好几个小类,小类下又有好几个小小类,就像下图: 要实现这个也不难, 思路如下:按照大类来循环,如上就是按照张江校区.徐汇校区.临港校区三个大类循环,然 ...

  8. JAVA分析html算法(JAVA网页蜘蛛算法)

    近来有些朋友在做蜘蛛算法,或者在网页上面做深度的数据挖掘.但是遇到复杂而繁琐的html页面大家都望而却步.因为很难获取到相应的数据. 最古老的办法的是尝试用正则表达式,估计那么繁琐的东西得不偿失,浪费 ...

  9. 通过网页查看服务器算法,java分析html算法(java网页蜘蛛算法示例)

    遇到复杂而繁琐的html页面大家都望而却步.因为很难获取到相应的数据. 最古老的办法的是尝试用正则表达式,估计那么繁琐的东西得不偿失,浪费我们宝贵的时间. 第二个办法用开源组织htmlparser的包 ...

  10. springmvc使用easypoi导出导入Excel表(1):导出Excel表

    编译工具:eclipse 项目:maven+ssm springmvc使用easypoi导出导入Excel表(2):导入Excel表 在pom.xml引入easypoi的依赖包: <!--eas ...

最新文章

  1. 对于一些手机内存概念的思考、深入理解java的finalize,对于内存优化的小总结...
  2. 2007年抓的兔子太多了,结果没抓到一个。
  3. 微软是如何使用 C# 重写 C# 编译器并将其开源的
  4. request mysql 接口_TP5接口开发
  5. python 生成pdf页面大小_使用具有自定义大小页面和最佳图像分辨率的Reportlab生成PDF...
  6. Spark Streaming之updateStateByKey和mapWithState比较
  7. 轻松矿工抽水多少_欧冠 皇马vs顿涅茨克矿工 矿工主力缺席 皇马主场霸气狂飙...
  8. ## CSP 201509-2 日期计算(C语言)(100分)
  9. google浏览器不能登录
  10. Linux基础—1.Linux系统(CentOS6.7)详细安装过程
  11. jsp连接mysql 菜鸟_在JSP中访问数据库大全
  12. Go语言自学系列 | 高效golang开发
  13. 筹码底部共振(同花顺指标 副图 源码 测试图)
  14. Linux系统下的hadoop常用命令
  15. shell基础+强化
  16. 56道java基础必“背“面试题(备战2022金三银四)
  17. 微商如何通过喜马拉雅引流?首先要明白引流的目的是什么?
  18. 3. iphone项目如何联机调试和发布程序(99$)
  19. 买一台云服务器到底能做什么?
  20. Java 多项式求值

热门文章

  1. 骑士智能科技M5310模块连接华为OC平台实现数据交互
  2. 《layui宇宙版教程》:扫描二维码加2000人QQ群交流学习
  3. 四川师范大学测量学地图学90分版本
  4. Wireshark网络抓包工具下载和安装(2023)
  5. Away3D:《Flash 3D基础向导》已出版
  6. bitbucket创建代码_了解有关Bitbucket Cloud中的代码审查的信息
  7. 转载 积分/C币获取方式
  8. 计算机二级证书北京联合大学,北京联合大学是几本 北京联合大学是一本还是二本...
  9. 物业管理系统/小区物业管理系统
  10. python如何打印txt文件_关于文本:如何将所有打印导出到Python中的.txt文件?