1.引用依赖

        <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.1.0</version></dependency><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><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml-schemas</artifactId><version>4.1.2</version></dependency>

2. 设置 excel模板

3.设置下载内容以及Excel导出

3.1设置下载头

        response.setCharacterEncoding("utf-8");// 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系String fileNameutf = URLEncoder.encode("下载文档的名称", "UTF-8").replaceAll("\\+", "%20");response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileNameutf + ".xlsx");String contentType = ContentTypeUtil.getContentType(suffix);response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");

3.2 加载模板并解析数据

//设置配置信息
//横向循环:FillConfig horizontalFillConfig = FillConfig.builder().direction(WriteDirectionEnum.HORIZONTAL).build();
//纵向循环(默认):FillConfig verticalFillConfig = FillConfig.builder().direction(WriteDirectionEnum.VERTICAL).build();
FillConfig fillConfig =  FillConfig.builder().forceNewRow(Boolean.TRUE).build();
//加载下载输出流
OutputStream out = new BufferedOutputStream(response.getOutputStream());
//加载模板
DefaultResourceLoader resourceLoader = new DefaultResourceLoader();
InputStream in= resourceLoader.getResource("模板路径").getInputStream();
ExcelWriter excelWriter = EasyExcel.write(out).withTemplate(in).excelType(ExcelTypeEnum.XLSX).build();
//创建writeSheet对象WriteSheet writeSheet =EasyExcel.writerSheet().build();
//创建需要解析的数据
//1.集合(不一定分要是JsonObject,使用Bean或者map也许,只要是:k-v)
List<JsonObject> l1=new ArrayList<>();
List<JsonObject> l2=new ArrayList<>();
for(i=0;i<5;i++){
JsonObject data=new JsonObject();
data.put("a","a");
data.put("b","b");
data.put("c","c");
data.put("d","d");
l1.add(data);
l2.add(data);
}
//此时的key值与上述的excel模板中 header1.a 中对header1或者header2应,做解析对应集合使用
List<FillWrapper> fillWrappers = new LinkedList<>();
fillWrappers.add(new FillWrapper("header1",l1));
fillWrappers.add(new FillWrapper("header2",l2));
//2.k-v形式 此时的key 与 excel模板中非集合的解析,所以要进行对应
Map dataMap = new HashMap<String,Object>()
dataMap.put("name","name");
dataMap.put("sex","sex");
dataMap.put("age","age");
//3.设置数据并进行解析
fillWrappers.forEach(v->{excelWriter.fill(v, fillConfig, writeSheet);
});
excelWriter.fill(dataMap ,fillConfig, writeSheet);
// 关闭流并将数据刷新
excelWriter.finish();
out.close();
in.close();

4.当解析集合或者k-v时需要继承上一行的合并单元格情况时(前提条件是上一行有数据,即非第一行),可做如下设置:

4.1创建一个AbstractMergeStrategy实现类


public class MyMergeStrategy extends AbstractMergeStrategy {@Overrideprotected void merge(Sheet sheet, Cell cell, Head head, Integer relativeRowIndex) {if (relativeRowIndex == null || relativeRowIndex == 0) {return;}int rowIndex = cell.getRowIndex();int colIndex = cell.getColumnIndex();sheet = cell.getSheet();Row preRow = sheet.getRow(rowIndex - 1);//获取上一行的该格Cell preCell = preRow.getCell(colIndex);List<CellRangeAddress> list = sheet.getMergedRegions();CellStyle cs = cell.getCellStyle();cell.setCellStyle(cs);for (int i = 0; i < list.size(); i++) {CellRangeAddress cellRangeAddress = list.get(i);if (cellRangeAddress.containsRow(preCell.getRowIndex()) && cellRangeAddress.containsColumn(preCell.getColumnIndex())) {int lastColIndex = cellRangeAddress.getLastColumn();int firstColIndex = cellRangeAddress.getFirstColumn();CellRangeAddress cra = new CellRangeAddress(cell.getRowIndex(), cell.getRowIndex(), firstColIndex, lastColIndex);sheet.addMergedRegion(cra);return;}}}
}

4.2 在创建 WriteSheet 进行加载

WriteSheet writeSheet = EasyExcel.writerSheet().registerWriteHandler(new MyMergeStrategy ()).build();

使用easyExcel解析list或k-v数据并生成excel进行下载相关推荐

  1. python爬取沪深所有股票数据并生成Excel文件

    爬取沪深所有股票数据并生成Excel文件 一.分析需求 1.对于沪深两市的各只股票,获取其:'股票代码', '股票名称', '最高', '最低', '涨停', '跌停', '换手率', '振幅', ' ...

  2. springboot实现数据库数据导出生成Excel报表

    一.导入poi依赖 <!-- poi实现excel导入导出--><dependency><groupId>org.apache.poi</groupId> ...

  3. 【如何批量从PDF提取数据并生成excel】

    如何批量从PDF提取数据并生成excel 最近帮同学处理一些扫描生成的统计年鉴,需要将里面的数据提取出来到excel文件中,但是市面上能找到的要么是收费,要么是识别不准确.结果乱码等等.在GitHub ...

  4. 腾讯云文字识别API提取表格数据并生成Excel文件

    腾讯云文字识别API提取表格数据并生成Excel文件 本文主要介绍了利用腾讯云表格文字识别API提取图片表格数据并生成Excel文件.主要涉及的知识点有:腾讯云API的调用.json文件的处理以及Ex ...

  5. 根据excel列动态创建mysql表_根据数据库字段动态生成excel模版下载,上传模版获取数据存入数据库(poi 反射)...

    环境:mysql5.7.28 java8 Spring boot 2.2.4 mybatis-plus3.10 动态:根据需求,用户可以选择对应的字段生成excle模版 下载 poi 反射:poi是e ...

  6. python爬虫爬取腾讯网站——实时疫情数据并生成Excel表格

    一.基本介绍: 开发背景:自从2020年新冠疫情发生后,至今为止的相关疫情数据新闻已经是非常的巨大了,我们无时不在在用数据尝试帮助我们解剖全球的疫情状况.由此可见,新冠疫情数据的新闻报道数量与国内疫情 ...

  7. asp点击增加一条表格数据_asp生成excel报表(一)

    1. 前言 报表打印通常是管理信息系统中的一个重要模块,而Excel凭借它功能强大.应用灵活.通用性强等的优势在报表打印中获得了广泛的应用. 最初的管理信息系统基本上是采用客户机/服务器(C/S)模式 ...

  8. 微信小程序如何实现将数据导出生成excel

    码字不易,有帮助的同学希望能关注一下我的微信公众号:Code程序人生,感谢!代码自用自取. 这个需求也是我在接私活的时候遇到的,需求就是,要实现将指定数据库表的数据全部导出生成excel和按需导出,也 ...

  9. vb6 数据自动生成excel文件_Excel随机生成数据

    工作中有时候需要大量数据,而手头没有现成的数据怎么办?,很多小伙伴苦思冥想编写数据,意义不大还累个半死,今天推出两种方法随机生成数据小妙招. 1.用rand函数生成A与B之间的随机数字(A≤随机数≤B ...

最新文章

  1. 腾讯张正友:攻克可进化机器人,6个研究趋势与7大技术突破点
  2. 《C#与.NET3.5高级程序设计(第4版)》笔记10
  3. java.net.SocketException: 断开的管道 (Write failed) 错误,数据库隔一段时间就断开的问题...
  4. mysql 命令 pdf_MySQL命令文档 PDF 下载
  5. java 变量初始化_浅谈Java变量的初始化顺序详解
  6. Python:我可以使用类变量作为线程锁吗?
  7. java createcell_CreateCell
  8. 关于javascript控制系统弹出下载提示 用以下载图片
  9. ABAP-内表数据下载到CSV格式(原创转载请注明)
  10. WebGL 绘制Line的bug(三)
  11. 新员工入职表_医院新员工入职培训怎么做?
  12. msyql创建数据库并指定字符集
  13. FC协议监控卡(FC协议分析仪),FC Monitor
  14. 中国塑料加工工业协会侵犯群益公司名誉权 法院判决赔偿财产损失和赔礼道歉30天
  15. Python与SEO,搜狗站长平台链接提交工具Python脚本源码
  16. OFFICE激活报错0X80080005
  17. 问道法宝升级经验统计
  18. 创业失败的工程师内心依旧有代码
  19. 最新的计算机知识点总结,2017计算机一级基础知识点总结
  20. P1500 丘比特的烦恼

热门文章

  1. 微信营销系统,谁主浮沉?
  2. MindSpore体验--在Windows10中源码安装
  3. show函数的作用是什么python_python 学习之Python函数
  4. QUIC详解(转载)
  5. CFF CSP认证考试题 第29次 LDAP
  6. nginx安装相关依赖
  7. 【linux】一文总结linux系统平台完整的启动周期
  8. BCM交换芯片之L4分析
  9. 和与余数的和同余理解_模和同余定理
  10. 2022 CCF BDCI 返乡发展人群预测 微弱提升(特征离散化)