IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> easyExcel导出表格 -> 正文阅读

[开发测试]easyExcel导出表格

需求:

从数据库查到数据,以给定样式的excel做原型参考,写一个导出excel的接口。(即:传参发送请求->返回文件流->点击链接下载)

代码详解:

//调用同类下接口获取数据的过程,可以忽略
RestResult<List<Map<String,Object>>> ret = new RestResult<>();
ret = stats_reports(checkParam);
List<Map<String,Object>> list =new ArrayList<>();
//当前原始数据以map的形式放在list中,生成表格后存在数据消失问题,只有表头没有数据。
list =ret.getData(); 
//ExportExcelUtils.transFormation为集合转换方法,目的是将map数据放到实体类中,解决读不到数据的问题。也可以从数据库取出来时直接用List<实体类>存储。TimeReportRe是自己的实体类
List<TimeReportRe> reslist =ExportExcelUtils.transFormation(list);
//生成文件流,返回给浏览器,可实现文件自动下载,目前测试只有用浏览器调用该方法才能正常生成文件,其他方式(postman生成文件名为乱码,内容正常、swagger均为乱码),所以目前只能用get请求(若大佬们知道原由,还请告知,感谢)
//用代码获取response来替代方法参数中的response,解决response.getOutputStream()已经存在的问题,修改后需要在方法上增加注解@ResponseBody
HttpServletResponse response = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getResponse();
response.setContentType("application/vnd.ms-excel;charset=utf-8");
response.setCharacterEncoding("utf-8");
// fileName为文件名,URLEncoder.encode防止中文乱码 
String fileName = URLEncoder.encode("测试表格", "UTF-8");
response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xls");
OutputStream outputStream=  response.getOutputStream();
//sheet()中为表格中sheet名,ExportExcelUtils.head()为表头样式方法,具体讲解和代码在下面的代码块中,通过EasyExcel.head()方法可以看出这里需要一个List<List<String>>类型的参数
EasyExcel.write(outputStream).sheet("测试").head(ExportExcelUtils.head())
.doWrite(reslist);
//自定义表格头
public static List <List<String>> head(){
    List<List<String>> headTitles = Lists.newArrayList();
    //一个list<String>代表一列,每一个String代表这一列中的一行,按顺序从上到下,相邻相同内容的单元格自动合并
    headTitles.add( Lists.newArrayList("所属区域编码","所属区域编码","所属区域编码") );
    headTitles.add( Lists.newArrayList("地区编码","地区编码","地区编码") );
    headTitles.add( Lists.newArrayList("地区名称","地区名称","地区名称") );
    return headTitles;
}

示例如下:

?相关依赖:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>2.2.3</version>
</dependency>

解决问题:

文件流怎么写,或者怎么能调用接口直接下载文件,而不是后台写死一个下载路径自动下载

报错response.getOutputStream()已经存在,已经加了response.reset();还是报错

导出的表头数据对应哪里,或者怎么自定义表头

导出的表格为什么只有表头没有数据

补充:

最新测试发现当postman调用get请求时返回的文件流名字是乱码,实际打开后内容正常。??

一个奈斯的easyExcel文档:?EasyExcel · 语雀

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2022-01-14 02:17:03  更:2022-01-14 02:18:59 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/18 4:41:16-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码