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 · 语雀

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用EasyExcel可以轻松地导出表格并进行下载。首先,您需要在您的项目中添加EasyExcel的依赖。然后,您可以创建一个导出对象,如引用\[2\]中的BasicSysUserExcelData类。在该类中,您可以使用@ExcelProperty注解来指定每个字段在Excel中的列名。接下来,您可以使用EasyExcel提供的工具类来进行导出操作。以下是一个简单的示例代码: ```java // 创建导出数据列表 List<BasicSysUserExcelData> dataList = new ArrayList<>(); // 添加数据到列表中 // 设置导出的文件路径和文件名 String filePath = "path/to/exported/file.xlsx"; // 执行导出操作 EasyExcel.write(filePath, BasicSysUserExcelData.class).sheet("Sheet1").doWrite(dataList); ``` 在上述代码中,您需要将数据添加到dataList中,并指定导出的文件路径和文件名。然后,使用EasyExcel.write()方法指定导出的文件和数据类型,并使用.sheet()方法指定导出的Sheet名称。最后,使用.doWrite()方法执行导出操作。 完成导出后,您可以将生成的Excel文件提供给用户进行下载。用户可以通过点击下载链接或使用其他方式下载该文件。 请注意,上述代码只是一个简单的示例,您可能需要根据您的具体需求进行适当的修改和扩展。 #### 引用[.reference_title] - *1* *2* [EasyExcel导出excel表格](https://blog.csdn.net/LF15527554599/article/details/123925722)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值