java 分析excel模板,java 根据excel模板导出excel
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相关推荐
- springboot使用jxls导出excel___(万能通用模板)--- SpringBoot导入、导出Excel文件___SpringBoot整合EasyExcel模板导出Excel
springboot使用jxls导出excel 实现思路: 首先在springBoot(或者SpringCloud)项目的默认templates目录放入提前定义好的Excel模板,然后在具体的导出接口 ...
- php导出excel格式文件,PHP导入与导出Excel文件的方法
一.PHP导出Excel文件 1,推荐phpexcel,官方网站: http://www.codeplex.com/PHPExcel 导入导出都成,可以导出office2007格式,同时兼容2003 ...
- (万能通用模板)--- SpringBoot导入、导出Excel文件
先把项目的demo发一下,看完文章可以看一下,demo 前言:最近做项目过程中使用到了一个权限管理框架:若依,使用过程中发现他的文件导入和导出功能非常的实用,在这里特此做一个小demo跟大家分享一下. ...
- java控制台输出五行字符串_java五行代码导出Excel
已经写过两种Excel导出插件了.今天再安利一个极简的导出Excel的框架,导出无特殊格式要求的Excel,只需五行代码: 先看代码 再看效果 EasyExcel 本案例用到的框架是阿里推出的Easy ...
- java jxl创建多个sheet,使用jxl导出excel时怎么创建多个sheet | 学步园
虽然知道excel导出可能会出现要记录要分多个sheet的情况,但迄今为止还是没有遇到过,今天有空试了一把 export try{ 查询开始/// Class.forName("oracle ...
- java swing 导出文件_java swing (一) 导出excel文件并打开
点击XXX管理系统中的"导出Excel"按钮,然后弹出如上图,点击"保存"以后,该Excel就保存到指定路径,并且打开. 上述的动作,其实不难,主要是打开该文件 ...
- java excel中重复数据 事务处理_Java导出excel时合并同一列中相同内容的行思路详解...
一.有时候导出Excel时需要按类别导出,一大类下好几个小类,小类下又有好几个小小类,就像下图: 要实现这个也不难, 思路如下:按照大类来循环,如上就是按照张江校区.徐汇校区.临港校区三个大类循环,然 ...
- JAVA分析html算法(JAVA网页蜘蛛算法)
近来有些朋友在做蜘蛛算法,或者在网页上面做深度的数据挖掘.但是遇到复杂而繁琐的html页面大家都望而却步.因为很难获取到相应的数据. 最古老的办法的是尝试用正则表达式,估计那么繁琐的东西得不偿失,浪费 ...
- 通过网页查看服务器算法,java分析html算法(java网页蜘蛛算法示例)
遇到复杂而繁琐的html页面大家都望而却步.因为很难获取到相应的数据. 最古老的办法的是尝试用正则表达式,估计那么繁琐的东西得不偿失,浪费我们宝贵的时间. 第二个办法用开源组织htmlparser的包 ...
- springmvc使用easypoi导出导入Excel表(1):导出Excel表
编译工具:eclipse 项目:maven+ssm springmvc使用easypoi导出导入Excel表(2):导入Excel表 在pom.xml引入easypoi的依赖包: <!--eas ...
最新文章
- 对于一些手机内存概念的思考、深入理解java的finalize,对于内存优化的小总结...
- 2007年抓的兔子太多了,结果没抓到一个。
- 微软是如何使用 C# 重写 C# 编译器并将其开源的
- request mysql 接口_TP5接口开发
- python 生成pdf页面大小_使用具有自定义大小页面和最佳图像分辨率的Reportlab生成PDF...
- Spark Streaming之updateStateByKey和mapWithState比较
- 轻松矿工抽水多少_欧冠 皇马vs顿涅茨克矿工 矿工主力缺席 皇马主场霸气狂飙...
- ## CSP 201509-2 日期计算(C语言)(100分)
- google浏览器不能登录
- Linux基础—1.Linux系统(CentOS6.7)详细安装过程
- jsp连接mysql 菜鸟_在JSP中访问数据库大全
- Go语言自学系列 | 高效golang开发
- 筹码底部共振(同花顺指标 副图 源码 测试图)
- Linux系统下的hadoop常用命令
- shell基础+强化
- 56道java基础必“背“面试题(备战2022金三银四)
- 微商如何通过喜马拉雅引流?首先要明白引流的目的是什么?
- 3. iphone项目如何联机调试和发布程序(99$)
- 买一台云服务器到底能做什么?
- Java 多项式求值
热门文章
- 骑士智能科技M5310模块连接华为OC平台实现数据交互
- 《layui宇宙版教程》:扫描二维码加2000人QQ群交流学习
- 四川师范大学测量学地图学90分版本
- Wireshark网络抓包工具下载和安装(2023)
- Away3D:《Flash 3D基础向导》已出版
- bitbucket创建代码_了解有关Bitbucket Cloud中的代码审查的信息
- 转载 积分/C币获取方式
- 计算机二级证书北京联合大学,北京联合大学是几本 北京联合大学是一本还是二本...
- 物业管理系统/小区物业管理系统
- python如何打印txt文件_关于文本:如何将所有打印导出到Python中的.txt文件?