使用easyExcel解析list或k-v数据并生成excel进行下载
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进行下载相关推荐
- python爬取沪深所有股票数据并生成Excel文件
爬取沪深所有股票数据并生成Excel文件 一.分析需求 1.对于沪深两市的各只股票,获取其:'股票代码', '股票名称', '最高', '最低', '涨停', '跌停', '换手率', '振幅', ' ...
- springboot实现数据库数据导出生成Excel报表
一.导入poi依赖 <!-- poi实现excel导入导出--><dependency><groupId>org.apache.poi</groupId> ...
- 【如何批量从PDF提取数据并生成excel】
如何批量从PDF提取数据并生成excel 最近帮同学处理一些扫描生成的统计年鉴,需要将里面的数据提取出来到excel文件中,但是市面上能找到的要么是收费,要么是识别不准确.结果乱码等等.在GitHub ...
- 腾讯云文字识别API提取表格数据并生成Excel文件
腾讯云文字识别API提取表格数据并生成Excel文件 本文主要介绍了利用腾讯云表格文字识别API提取图片表格数据并生成Excel文件.主要涉及的知识点有:腾讯云API的调用.json文件的处理以及Ex ...
- 根据excel列动态创建mysql表_根据数据库字段动态生成excel模版下载,上传模版获取数据存入数据库(poi 反射)...
环境:mysql5.7.28 java8 Spring boot 2.2.4 mybatis-plus3.10 动态:根据需求,用户可以选择对应的字段生成excle模版 下载 poi 反射:poi是e ...
- python爬虫爬取腾讯网站——实时疫情数据并生成Excel表格
一.基本介绍: 开发背景:自从2020年新冠疫情发生后,至今为止的相关疫情数据新闻已经是非常的巨大了,我们无时不在在用数据尝试帮助我们解剖全球的疫情状况.由此可见,新冠疫情数据的新闻报道数量与国内疫情 ...
- asp点击增加一条表格数据_asp生成excel报表(一)
1. 前言 报表打印通常是管理信息系统中的一个重要模块,而Excel凭借它功能强大.应用灵活.通用性强等的优势在报表打印中获得了广泛的应用. 最初的管理信息系统基本上是采用客户机/服务器(C/S)模式 ...
- 微信小程序如何实现将数据导出生成excel
码字不易,有帮助的同学希望能关注一下我的微信公众号:Code程序人生,感谢!代码自用自取. 这个需求也是我在接私活的时候遇到的,需求就是,要实现将指定数据库表的数据全部导出生成excel和按需导出,也 ...
- vb6 数据自动生成excel文件_Excel随机生成数据
工作中有时候需要大量数据,而手头没有现成的数据怎么办?,很多小伙伴苦思冥想编写数据,意义不大还累个半死,今天推出两种方法随机生成数据小妙招. 1.用rand函数生成A与B之间的随机数字(A≤随机数≤B ...
最新文章
- 腾讯张正友:攻克可进化机器人,6个研究趋势与7大技术突破点
- 《C#与.NET3.5高级程序设计(第4版)》笔记10
- java.net.SocketException: 断开的管道 (Write failed) 错误,数据库隔一段时间就断开的问题...
- mysql 命令 pdf_MySQL命令文档 PDF 下载
- java 变量初始化_浅谈Java变量的初始化顺序详解
- Python:我可以使用类变量作为线程锁吗?
- java createcell_CreateCell
- 关于javascript控制系统弹出下载提示 用以下载图片
- ABAP-内表数据下载到CSV格式(原创转载请注明)
- WebGL 绘制Line的bug(三)
- 新员工入职表_医院新员工入职培训怎么做?
- msyql创建数据库并指定字符集
- FC协议监控卡(FC协议分析仪),FC Monitor
- 中国塑料加工工业协会侵犯群益公司名誉权 法院判决赔偿财产损失和赔礼道歉30天
- Python与SEO,搜狗站长平台链接提交工具Python脚本源码
- OFFICE激活报错0X80080005
- 问道法宝升级经验统计
- 创业失败的工程师内心依旧有代码
- 最新的计算机知识点总结,2017计算机一级基础知识点总结
- P1500 丘比特的烦恼