一、使用hutool导出excel

1.1 hutool介绍

hutool功能很强大,http请求到json处理、excel的导入导出、定时任务、IO、缓存、数据库操作等都提供了简单而方便的api供我们使用,好处是再也不用担心自己去整理常用的工具类了,同时也支持按需引入【但一般项目都是直接一如hutool-all 导致项目引入很多不必要的工具类】。

从2014年首次发布第一版本到现在已经8年了,这款国产工具类确实收获了越来越多的关注,而且社区的热度是可以的,但是比起Apache或者谷歌提供的工具类,更新频率和可靠性也许稍差,但在我看来是可以考虑使用的。

1.2 编写代码导出excel【仅表头】

我们要的效果:

所需编写的代码:

    @GetMapping("/exportTemplate")public void exportTemplate(HttpServletResponse response) throws IOException {String column1Name1 = "时间戳";String column1Name2 = "设备名称";List<String> headList = new ArrayList<>();headList.add(column1Name1);headList.add(column1Name2);//在内存操作,写到浏览器ExcelWriter writer= ExcelUtil.getWriter(true);// 设置表头的宽度writer.setColumnWidth(0, 20);writer.setColumnWidth(1, 15);writer.writeHeadRow(headList).write(Collections.emptyList());//设置content—typeresponse.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset:utf-8");//Content-disposition是MIME协议的扩展,MIME协议指示MIME用户代理如何显示附加的文件。response.setHeader("Content-Disposition","attachment;filename="+URLEncoder.encode("数据集导入模板","UTF-8")+".xlsx");ServletOutputStream outputStream= response.getOutputStream();//将Writer刷新到OutPutwriter.flush(outputStream,true);outputStream.close();writer.close();}

1.3 编写代码导出excel【含内容】

我们要的效果:

所需编写的代码:

    @GetMapping("/exportTemplate")public void exportTemplate(HttpServletResponse response) throws IOException {String column1Name1 = "时间戳";String column1Name2 = "设备名称";List<String> headList = new ArrayList<>();headList.add(column1Name1);headList.add(column1Name2);//在内存操作,写到浏览器ExcelWriter writer= ExcelUtil.getWriter(true);// 设置表头的宽度writer.setColumnWidth(0, 20);writer.addHeaderAlias("timestamp",column1Name1);writer.setColumnWidth(1, 15);writer.addHeaderAlias("deviceName",column1Name2);// 默认的,未添加alias的属性也会写出,如果想只写出加了别名的字段,可以调用此方法排除之writer.setOnlyAlias(true);// 表格内容【相比上一节新内容】List<CollectDataExcelVo> excelList = new ArrayList<>();CollectDataExcelVo vo1 = new CollectDataExcelVo();vo1.setDeviceName("A类设备");vo1.setTimestamp(DateUtil.format(new Date()));excelList.add(vo1);CollectDataExcelVo vo2 = new CollectDataExcelVo();vo2.setDeviceName("B类设备");vo2.setTimestamp(DateUtil.format(new Date()));excelList.add(vo2);writer.writeHeadRow(headList).write(excelList);//设置content—typeresponse.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset:utf-8");//Content-disposition是MIME协议的扩展,MIME协议指示MIME用户代理如何显示附加的文件。response.setHeader("Content-Disposition","attachment;filename="+URLEncoder.encode("数据集导入模板","UTF-8")+".xlsx");ServletOutputStream outputStream= response.getOutputStream();//将Writer刷新到OutPutwriter.flush(outputStream,true);outputStream.close();writer.close();}
@Data
public class CollectDataExcelVo {/*** 时间戳*/@ApiModelProperty(value = "时间戳")private String timestamp;/*** 设备编码*/@ApiModelProperty(value = "设备名称")private String deviceName;
}

1.4 编写代码导出excel【导出下拉列表】

我们要的效果:

所需编写的代码:

    @GetMapping("/exportTemplate")public void exportTemplate(HttpServletResponse response) throws IOException {String column1Name1 = "时间戳";String column1Name2 = "设备名称";List<String> headList = new ArrayList<>();headList.add(column1Name1);headList.add(column1Name2);//在内存操作,写到浏览器ExcelWriter writer= ExcelUtil.getWriter(true);// 设置表头的宽度writer.setColumnWidth(0, 20);writer.addHeaderAlias("timestamp",column1Name1);writer.setColumnWidth(1, 15);writer.addHeaderAlias("deviceName",column1Name2);// 默认的,未添加alias的属性也会写出,如果想只写出加了别名的字段,可以调用此方法排除之writer.setOnlyAlias(true);// 表格下拉框【相比上一节新内容】writer.addSelect(1, 1, new String[]{"1#进线","2#进线", "3#进线"});writer.writeHeadRow(headList).write(Collections.emptyList());//设置content—typeresponse.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset:utf-8");//Content-disposition是MIME协议的扩展,MIME协议指示MIME用户代理如何显示附加的文件。response.setHeader("Content-Disposition","attachment;filename="+URLEncoder.encode("数据集导入模板","UTF-8")+".xlsx");ServletOutputStream outputStream= response.getOutputStream();//将Writer刷新到OutPutwriter.flush(outputStream,true);outputStream.close();writer.close();}

二、使用easyexcel导出excel

2.1 easyexcel介绍

EasyExcel是阿里巴巴开源的一个excel处理框架,以使用简单、节省内存著称;能大大减少占用内存的主要原因是在解析Excel时没有将文件数据一次性全部加载到内存中,而是从磁盘上一行行读取数据,逐个解析。

2.2 编写代码导出excel

我们要的效果:

所需编写的代码:

pom引入依赖:

        <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.0.5</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.2</version></dependency> 

java代码:

import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.annotation.write.style.ColumnWidth;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;@Data
public class CollectDataExcelVo {/*** 时间戳*/@ExcelProperty(value = "时间戳", index = 0)@ColumnWidth(value = 20)@ApiModelProperty(value = "时间戳")private String timestamp;/*** 设备名称*/@ExcelProperty(value = "设备名称", index = 1)@ColumnWidth(value = 15)@ApiModelProperty(value = "设备名称")private String deviceName;
}
    @GetMapping("/exportTemplate")public void exportTemplate(HttpServletResponse response) throws IOException {// 模拟数据库获取数据List<CollectDataExcelVo> list = data();response.setCharacterEncoding(StandardCharsets.UTF_8.name());response.setHeader("content-Type", "application/vnd.ms-excel");response.setHeader("Content-Disposition","attachment;filename=" + URLEncoder.encode("template"+ DateUtils.format(new Date(), "yyyy-MM-dd")+".xlsx", StandardCharsets.UTF_8.name()));EasyExcel.write(response.getOutputStream(), CollectDataExcelVo.class).sheet().doWrite(list);}private List<CollectDataExcelVo> data() {List<CollectDataExcelVo> list = ListUtils.newArrayList();for (int i = 1; i <= 2; i++) {CollectDataExcelVo data = new CollectDataExcelVo();data.setTimestamp(DateUtil.format(new Date()));data.setDeviceName("A类设备"+i);list.add(data);}return list;}

三、从项目resources目录导出excel

3.1 将文件放入项目路径下

3.2 将文件导出

将文件从项目工程的 resources/file 目录下导出,所需代码如下:

import org.apache.poi.util.IOUtils;@GetMapping("/exportTemplate")public void exportTemplate(HttpServletResponse response) {InputStream inputStream = null;OutputStream outputStream = null;try {String fileName= URLEncoder.encode("template","UTF-8");outputStream = response.getOutputStream();// 获取springboot resource 路径下的文件inputStream = this.getClass().getResourceAsStream("/file/template.xlsx");response.setContentType("application/vnd.ms-excel");response.setHeader("Content-Disposition","attachment;filename="+fileName+".xlsx");IOUtils.copy(inputStream, outputStream);} catch (Exception e) {throw new ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR, e.toString());} finally {closeInput(inputStream);flushOutput(outputStream);}}private void flushOutput(OutputStream outputStream) {try {outputStream.flush();} catch (IOException e) {logger.error("释放流异常", e);}}private void closeInput(InputStream inputStream) {try {inputStream.close();} catch (IOException e) {logger.error("释放流异常", e);}}

导出后会存在问题 excel文件导出后打不开!! 只需再pom.xml中配置如下即可:

    <plugins><!-- maven资源文件复制插件 --><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-resources-plugin</artifactId><configuration><encoding>UTF-8</encoding><nonFilteredFileExtensions><nonFilteredFileExtension>xls</nonFilteredFileExtension><nonFilteredFileExtension>xlsx</nonFilteredFileExtension></nonFilteredFileExtensions></configuration></plugin></plugins>

四、使用easypoi 导出excel

4.1 easypoi 介绍

easypoi 也是国产开源的软件,它通过简单的注解和模板语言 (熟悉的表达式语法),就可以实现excel的导入导出功能。

4.2 编写代码导出excel

我们要的效果:

所需编写的代码:

pom引入依赖:

        <dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-base</artifactId><version>4.1.0</version></dependency><dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-web</artifactId><version>4.1.0</version></dependency><dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-annotation</artifactId><version>4.1.0</version></dependency>

java代码:

// 工具类
public class ExcelUtil {public static void exportExcel(List<?> list, Class<?> pojoClass, String fileName, boolean isCreateHeader, HttpServletResponse response) {ExportParams exportParams = new ExportParams();exportParams.setCreateHeadRows(isCreateHeader);Workbook workbook = ExcelExportUtil.exportExcel(exportParams, pojoClass, list);if (workbook != null) ;try {response.setCharacterEncoding("UTF-8");response.setHeader("content-Type", "application/vnd.ms-excel");response.setHeader("Content-Disposition","attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));workbook.write(response.getOutputStream());} catch (IOException e) {try {throw new Exception(e.getMessage());} catch (Exception e1) {e1.printStackTrace();}}}}
import cn.afterturn.easypoi.excel.annotation.Excel;
import lombok.Data;
import java.util.Date;@Data
public class CollectDataExcelVo {/*** 时间戳*/@Excel(name = "时间戳",format="yyyy-MM-dd HH:mm:ss", width = 20.0)private Date timestamp;/*** 设备编码*/@Excel(name = "设备名称", width = 20)private String deviceName;
}
@GetMapping("/export")@ApiOperation("导出数据")public void export(HttpServletResponse response) {String fileName = "template"+".xls";List<CollectDataExcelVo> list = data();ExcelUtil.exportExcel(list, CollectDataExcelVo.class, fileName, true, response);}

============

以上就是博主的excel导出方式总结,如有问题 欢迎在评论区留言

java的Excel导出方式总结相关推荐

  1. java中Excel导出echart图片

    java中Excel导出echart图片 1.在生成echart的前端代码生成图片代码后Echart.setOption(captestRcapEchartOption, true);后面加上以下代码 ...

  2. java实现excel导出合并单元格

    随着数据的不断增长,很多时候需要将数据导出到Excel中进行分析.处理和展示.而Java作为一种流行的编程语言,自然也提供了很多实现Excel导出的方法.本文将介绍如何使用Java实现Excel导出, ...

  3. Java之Excel导出工具类使用教程

    前言: 本工具类经过PostMan和web页面严格测试可用,经过了多个版本迭代优化,可以直接使用,也方便大家根据自己的业务需求,修改定制自己的导出工具. 市面上有很多封装好的导出工具(如:阿里的eas ...

  4. 记一次java实现excel导出

    新年过完了哦,小子我又来了,大家新年过的还快乐吗?反正我是只感觉到了"快,",没有感觉到"乐". 2021年的第一天,就接到新需求了.对,就是那个谁,来来,给个 ...

  5. java完成excel导出下载

    废话不多说,直接上代码! 一.添加依赖 <!-- excel导出相关依赖 --><dependency><groupId>org.apache.poi</gr ...

  6. java实现Excel导出(springboot)

    文章目录 一.完成相关配置 1.导入依赖 2.定义Excel注解以及Excels注解 3.给实体类添加Excel注解 二.Excel方法类 1.大致路线 2.定义ExcelUtil中的变量 3.Exc ...

  7. Java读取excel的方式,一篇文章看懂(详细)

    目录 一.excel读取的两种方式 1.1 jxl 和 poi 的区别和选择 二.jxl 的使用 2.1 导入相关依赖 2.2 操作 三.poi 的使用 3.1 导入相关依赖 3.2 操作 四.总结 ...

  8. java poi excel导出

    直接上代码 0. pom依赖 <dependency><groupId>cn.afterturn</groupId><artifactId>easypo ...

  9. java 实现excel 导出功能

    实现功能:java导出excel表 1.jsp代码 1 <form id="zhanwForm" action="<%=path%>/conferenc ...

最新文章

  1. QIIME 2用户文档. 7差异丰度分析gneiss(2018.11)
  2. html display布局,Web布局:display属性
  3. 转 Struct 和 Union区别 以及 对内存对齐方式的说明
  4. ChannelFactory.Endpoint 上的地址属性为空。ChannelFactory 的终结点必须指定一个有效的地址。...
  5. 使用无限生命期Session的方法
  6. git diff old mode 100644 new mode 100755
  7. javascript location.href 参数详解
  8. Java网络编程第一章
  9. Python 散点图的数据分析
  10. 宏碁电脑BIOS没有usb启动项怎么办?
  11. 解除操作系统宽带限制
  12. 关于安全域的划分与风险管理
  13. jbod ugood 磁盘驱动状态_JBOD磁盘配置和StorCLI命令使用小结
  14. 分享一个自用小功能--微信小程序二维码签到
  15. 【华为OD机试真题 Python】判断字符串子序列
  16. Mac 移动硬盘突然自己异常退出了(一)
  17. tensorflow.js在nodejs训练猫狗分类模型在浏览器上使用
  18. 腾讯产品法之读书笔记
  19. canvas压缩图片或者进行视频抓拍
  20. IDEA快速移动光标到行首或行尾;

热门文章

  1. 微信小程序课程的学习心得
  2. RFID定位技术浅析--新导智能
  3. 高新技术企业八大领域分析
  4. 腾讯财经 财经资讯 专题栏目 商业人生
  5. AspUpload组件上传大文件
  6. MacBook Pro拓展坞失灵问题的解决建议
  7. SQL语句大全,乔哥工作以后学到的所有的SQL都在这里
  8. 亿级以上的数据量 ES如何优化
  9. (附源码)小程序 社区居家养老互助服务管理平台 毕业设计 062027
  10. 安川ga700变频器故障码集_安川GA700/GH700系列变频器报警故障接地 缺项维修中心...