用hutool工具类导出excel
工作上有一个导出数据的需求,发现用hutool工具类可以非常简洁快捷的生成excel导出。
- 前期准备
引入hutool的依赖:
<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.7.21</version></dependency>
准备好导出的Excel模板:
第一行为标题文本
第二行为Bean的字段名
- 代码示例
主要使用到的有这两个类:
cn.hutool.core.util.ReflectUtil
cn.hutool.core.util.ExcelUtil
private void convertOrderListToXSSF(List<OrderVo> orderVoList, HttpServletResponse response) {//输出文件名称String targetFileName = DateUtil.currentSeconds() + "_order.xls";//0.从模板中提取表头String templateName = "导出模板.xlsx";InputStream inputStream = getClass().getClassLoader().getResourceAsStream(templateName);ExcelReader excelReader = ExcelUtil.getReader(inputStream);/*//A方法:这种方法使用了hutool提供的bean转换为excel行的方法,但有一个局限性:一个字段只能设置一个别名,因此无法生成同个字段取值的多个列,舍弃。//从模板文件中提取 字段名-表头文字的对应关系;第一行(key)为表头文字,第一行(value)为字段名,如name:名字Map<String, Object> filedNameTitle = excelReader.readAll().get(0);//定义标题别名for (Map.Entry<String, Object> entry : filedNameTitle.entrySet()) {excelWriter.addHeaderAlias(entry.getKey(), String.valueOf(entry.getValue()));}//只写出加了别名的字段excelWriter.setOnlyAlias(true);//写出大标题if(StringUtils.isNotBlank(targetFileTitle)) {excelWriter.merge(filedNameTitle.size() - 1, targetFileTitle, true);}excelWriter.write(voList, true);excelWriter.autoSizeColumnAll();*///表头文字List<Object> titleRow = excelReader.readRow(0);//表头文字对应的类字段名List<Object> filedNameRow = excelReader.readRow(1);//1.写数据ExcelWriter excelWriter = ExcelUtil.getWriter();//1.0 表头excelWriter.writeRow(titleRow, true);//1.1 内容-订单记录for (OrderVo orderVo : orderVoList) {//一行记录List<Object> row = new ArrayList<>();for (Object filedNameCell : filedNameRow) {//使用Java的反射机制,获取订单对象字段名对应的字段值String filedName = String.valueOf(filedNameCell);Object filedValue = ReflectUtil.getFieldValue(orderVo, filedName);filedValue = convertData(filedName, filedValue);row.add(filedValue);}excelWriter.writeRow(row, true);}//2.输出数据response.setContentType("application/vnd.ms-excel;charset=utf-8");// Content-disposition 默认值为inline,表示在浏览器窗口打开,attachment表示下载框,filename是文件名,如为中文需要编码response.setHeader("Content-Disposition", "attachment;filename=" + targetFileName);ServletOutputStream out = null;try {out = response.getOutputStream();} catch (IOException e) {e.printStackTrace();}excelWriter.flush(out, true);excelWriter.close();IoUtil.close(out);}
- 注意事项
在使用这个工具类时,发现打包不会报错,但运行时,
在读取excel模板这一步:ExcelReader excelReader = ExcelUtil.getReader(inputStream);
一直提示java.lang.NoSuchMethodError
;
排查了maven依赖后,发现项目同时还引入了org.apache.poi这个依赖且版本较低导致的,
因为是小组共用不能删除,所以更新了依赖版本就解决这个问题啦。
<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.2</version></dependency>
实现把excel从服务器下载到客户端的方法,参考了这篇文章:
hutool官网的使用示例
用hutool工具类导出excel相关推荐
- 利用hutool工具类导出Excel
简单介绍 可以使用hutool工具类,简单的生成Excel.本质上还是使用的POI组件,只是对其进行了封装,避免开发人员重复造轮子 hutool工具类链接 maven导入 <!-- hutool ...
- hutool工具类导出Excel表格
1.引入hutool和相关依赖 <dependency> <groupId>cn.hutool</groupId> <arti ...
- hutool工具类导出excel添加水印
// 创建 ExcelWriter 对象 ExcelWriter writer = ExcelUtil.getWriter("demo.xlsx");// 添加水印 ByteArr ...
- Java 利用hutool工具实现导出excel并合并单元格
Java 利用hutool工具实现导出excel并合并单元格 controller层调用service,就一个核心方法,没错就下面这个代码就能实现了.前提是项目里面要引用hutool包.把我这个复制到 ...
- Hutool工具类之excel导入导出
文章目录 1.导入excel 2.导出excel 1.导入excel ExcelReader reader = ExcelUtil.getReader("D:\\test.xlsx" ...
- java使用POI工具类导出excel
POI导出excel 1.导入maven依赖 <dependency><groupId>org.apache.poi</groupId><artifactId ...
- java获取excle表格对象_Java使用excel工具类导出对象功能示例
本文实例讲述了Java使用excel工具类导出对象功能.分享给大家供大家参考,具体如下: package com.gcloud.common; import org.apache.poi.ss.use ...
- java基于HuTool工具类ExcelWriter合并单元格
** java基于HuTool工具类ExcelWriter合并单元格 ** 1.基于HuTool工具类ExcelWriter合并单元格并且使用 jdk1.8 lambda表达式 效果如下: 用姓名和编 ...
- asp.net中使用excel类导出Excel文件,并导出到web客户端中遇到的问题
asp.net中使用excel类导出Excel文件,并导出到web客户端中遇到错误: 检索Com类工厂中CLSID为{000245-0000-0000-C000-000000000046}的组件失败, ...
最新文章
- ORB_SLAM2中Tracking线程的三种追踪方式
- hadloop大数据平台论文_企业大数据平台建设过程中的问题和建议
- 分布式服务管理框架-Zookeeper节点ACL
- 20172310 2017-2018-2 《程序设计与数据结构》第四周学习总结
- Day 20: 斯坦福CoreNLP —— 用Java给Twitter进行情感分析
- 'webpack-dev-server' 不是内部或外部命令,也不是可运行的程序 或批处理文件。
- SAP建议客户将UI技术迁移到Fiori的六大原因
- npm run build失败
- [转]Android应用的自动更新
- java swing 字体设置_java如何改变Swing应用程序的默认字体/字号
- Web App开发入门
- 王庆的边缘计算(第四章)
- linux启动报错23修复
- hive之内表和外表
- vue-router路由history模式+nginx部署项目到非根目录下(实践版)
- 2018艾耕科技笔试题
- Java24种设计模式(第二种)--代理模式(Proxy Pattern)
- PostgreSQL查询 动态输入参数
- h5游戏引流推广方法:电商平台如何引流推广?
- 人的一生七八十年,到底该如何度过?