依赖版本

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

数据对象类

public class KsClAdReportBo  {@ExcelProperty("计划状态")private String unitStatus;@ExcelProperty("投放状态")private String putStatus;@ExcelProperty("出价类型")private String bidType;@ExcelProperty("优化目标")private String ocpxActionType;@ExcelProperty("投放方式")private String speed;@ExcelProperty("订单提交数")private Long eventOrderSubmit;@ExcelProperty("新增付费人数")private Long eventNewUserPay;@ExcelProperty("3秒播放数")private Long playDuration3s;@ExcelProperty("3秒播放率")private Double playDuration3sRate;//有效播放数,对标快手的played_three_seconds@ExcelProperty("有效播放数")private Long validPlay;//视频播放完成数,对标快手的played_end@ExcelProperty("完播数")private Long play100FeedBreak;//播放完成率@ExcelProperty("完播率")private Double playOverRate;public String getUnitStatus() {return unitStatus;}public void setUnitStatus(String unitStatus) {this.unitStatus = unitStatus;}public String getPutStatus() {return putStatus;}public void setPutStatus(String putStatus) {this.putStatus = putStatus;}public String getBidType() {return bidType;}public void setBidType(String bidType) {this.bidType = bidType;}public String getOcpxActionType() {return ocpxActionType;}public void setOcpxActionType(String ocpxActionType) {this.ocpxActionType = ocpxActionType;}public String getSpeed() {return speed;}public void setSpeed(String speed) {this.speed = speed;}public Long getEventOrderSubmit() {return eventOrderSubmit;}public void setEventOrderSubmit(Long eventOrderSubmit) {this.eventOrderSubmit = eventOrderSubmit;}public Long getEventNewUserPay() {return eventNewUserPay;}public void setEventNewUserPay(Long eventNewUserPay) {this.eventNewUserPay = eventNewUserPay;}public Long getPlayDuration3s() {return playDuration3s;}public void setPlayDuration3s(Long playDuration3s) {this.playDuration3s = playDuration3s;}public Double getPlayDuration3sRate() {return playDuration3sRate;}public void setPlayDuration3sRate(Double playDuration3sRate) {this.playDuration3sRate = DoubleUtil.getDouble2(playDuration3sRate);}public Long getValidPlay() {return validPlay;}public void setValidPlay(Long validPlay) {this.validPlay = validPlay;}public Long getPlay100FeedBreak() {return play100FeedBreak;}public void setPlay100FeedBreak(Long play100FeedBreak) {this.play100FeedBreak = play100FeedBreak;}public Double getPlayOverRate() {return playOverRate;}public void setPlayOverRate(Double playOverRate) {this.playOverRate =  DoubleUtil.getDouble2(playOverRate);}
}

导出下载方法

    /*** excl 文件导出响应下载** @param response    响应体* @param exportData  导出数据* @param fileName    文件名* @param columnNames 自定义字段名*/public static <E> void write(HttpServletResponse response, List<E> exportData, String fileName,List<String> columnNames) throws IOException {if (CollectionUtils.isEmpty(exportData)) throw new HMException("暂无可导出数据");try {response.setContentType("application/vnd.ms-excel");response.setCharacterEncoding("utf-8");response.setHeader("Content-disposition", "attachment;filename=" + fileName);//获取对象,并且根据自定义列的顺序反射赋值index顺序Class<?> aClass = exportData.get(0).getClass();//设置导出表格的字段顺序setExcelIndex(aClass, columnNames);//设置输出流和对象类型ExcelWriterBuilder write = EasyExcel.write(response.getOutputStream(), aClass);if (!CollectionUtils.isEmpty(columnNames)) {//设置参数字段write.includeColumnFieldNames(columnNames);}// 写入数据write.sheet("sheet1").doWrite(() -> exportData);write.excelType(ExcelTypeEnum.XLSX);write.autoCloseStream(true);} catch (Exception e) {LOGGER.error("write Exception:", e);}}/*** 设置导出表格的字段顺序** @param aClass      需要写入Excel的数据对象* @param columnNames 需要展示的自定义列*/private static void setExcelIndex(Class<?> aClass, List<String> columnNames) throws NoSuchFieldException, IllegalAccessException {//获取当前对象的字段ArrayList<Field> fields = Lists.newArrayList(aClass.getDeclaredFields());Class<?> superclass = aClass.getSuperclass();if (superclass != null) {//有父类则获取父类对象的字段fields.addAll(Lists.newArrayList(superclass.getDeclaredFields()));}for (int i = 0; i < columnNames.size(); i++) {for (Field field : fields) {if (!field.getName().equals(columnNames.get(i))) continue;ExcelProperty annotation = field.getAnnotation(ExcelProperty.class);if (annotation == null) continue;InvocationHandler handler = Proxy.getInvocationHandler(annotation);//获取 AnnotationInvocationHandler 的 memberValues 字段Field fieldMv = handler.getClass().getDeclaredField("memberValues");//因为这个字段事 private final 修饰,所以要打开权限fieldMv.setAccessible(true);Map<Object, Object> memberValues = (Map<Object, Object>) fieldMv.get(handler);if (!memberValues.containsKey("value")) continue;memberValues.put("index", i);}}}

效果展示


Easyexcel配置自定义列与自定义顺序导出下载Excel文件相关推荐

  1. Java中使用HSSFWorkbook POI导出下载excel文件

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.单元格的合并 二.表格的生成和导出 1.后端代码 2.前端代码 总结 前言 提示:这里可以添加本文要记录的大概内容 ...

  2. 【导出Excel】Vue实现导出下载Excel文件(blob文件流)--亲测可用

    // 下载blob文件流(暂不支持手机H5唤起下载文件!!!) downloadFile(res: any, fileName: any = '未命名', format: any = '.xlsx') ...

  3. 阿里开源(EasyExcel):使用Java将数据导出为Excel表格、带样式----》java web下载 Excel文件

    目录 一.技术选型 二.实现过程 1.导入依赖 2.编写工具类 EasyExcelUtil 3.公用参数类 EasyExcelParams 4.表格样式实体类 MyWriteHandler 5.数据实 ...

  4. easyexcel使用问题:使用时导出的excel文件损坏,打开不了,后台没异常错误

    错误问题:使用时导出的excel文件损坏,打开不了,后台没异常错误 解决方式:因为前端使用的是blob,最后定位错误在前端发送请求时漏了一个参数, responseType: 'blob' expor ...

  5. 第六期:如何通过知晓云将数据表导出为 Excel 文件

    作者:知晓云 - 小程序开发快人一步 来源:知晓课堂 在日常的工作中,常常需要根据运营需求对数据进行各种格式的处理和导出.导出后,不少人偏爱将数据放入 excel在进行处理. 一般来说,处理数据导出时 ...

  6. 使用SpringBoot+MongoDB数据导出为Excel文件

    MongoDB数据导出为Excel文件 注: 本文使用的是POI导出文件 导出数据两种创建工作簿的方式 // 创建工作簿 XSSFWorkbook wb = new XSSFWorkbook(); / ...

  7. 如何优化百万级别数据导出(excel 文件)

    如何优化百万级别数据导出(excel 文件) 背景 未优化前存在的问题 业务接口流程 优化后 业务接口流程(优化版v1) 业务接口流程(优化版v2) 优化效果 复盘 宏观层面 遇到的困难 收获 代码实 ...

  8. JavaScript中如何导出/导入Excel文件?SpreadJS轻松搞定

    SpreadJS v14.0正式版下载 JavaScript是一个涵盖多种框架.直译式.可以轻松自定义客户端的脚本语言,在 Web 应用程序中,更加易于编码和维护.而Excel 作为一款深受用户喜爱的 ...

  9. ASP.NET 2.0中将 GridView 导出到 Excel 文件中

    下面代码实现将 GridView 导出到 Excel文件中. 值得注意的是VerifyRenderingInServerForm重载方法: MSDN上的 VerifyRenderingInServer ...

最新文章

  1. 2009江民中国大陆地区计算机网络安全报告
  2. Xstream解析报文
  3. Intellij idea快速查看Java类字节码
  4. 洛谷 - P6292 区间本质不同子串个数(SAM+LCT+线段树)
  5. cocos2d-x初探学习笔记(5)--动作管理
  6. kali设置中文_kali安装教程
  7. Mybatis-plus实现动态表名查询
  8. 通过外挂插件向预训练语言模型中融入知识
  9. 关于SubSonic3.0插件使用SubSonic.Query.Select查询时,字段类型为tinyint时列丢失问题的Bug修复...
  10. maven scm 配置git
  11. 取消开机就弹出 msn中文网 操作步骤
  12. php公物管理系统,开源客户管理系统 fly-crm
  13. python调用QQ音乐API
  14. chrome控制台出现/null访问
  15. 基于Android的数据传输wifi,基于ANDROID平台的WIFI文件传输系统的研究与实现
  16. 移远EC200T模块应用移植
  17. Ae:字符面板与段落面板
  18. Python3 批量提取视频中的音频
  19. C语言中函数参数传递的方式:值传递,地址传递
  20. textarea标签中的换行符和空格

热门文章

  1. Svn commit failed aborting commit
  2. ❤️‍Spring从入门到大神--AOP从入门到精通
  3. 第1章 jQuery入门
  4. 【观察】世茂:数字化转型“升维记”
  5. JAVA入门--如何快速的判断一个数是奇数还是偶数
  6. Python实现端口检测
  7. 四篇关于chen_zhe的美文
  8. Vue中使用SVG图标的步骤【钢镚核恒】
  9. 【Linux】vim在每行行首或行尾添加/删除内容
  10. Linux FTP服务器匿名用户登录