范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

我用EasyExcel优化了公司的导出(附踩坑记录)

  背景介绍
  最近要改一个导出的功能,在原有的基础上,在导出一份明细数据,要求导出内容加在原有 excel 的第二个 sheet 上。考虑到数据量还比较大,干脆引入阿里的 EasyExcel 来做。
  下面我先上最终代码,再来说说我遇到的坑有哪些代码实战
  引入依赖     com.alibaba     easyexcel     3.1.2 
  代码:public String doHandle() {         try(ByteArrayOutputStream outputStream = new ByteArrayOutputStream();             com.alibaba.excel.ExcelWriter excelWriter = EasyExcel.write(outputStream).build()) {              List exportVos = queryAction.querySummaryExport();             List exportRateVos = queryAction.queryClassRate();              WriteSheet writeSheet = EasyExcel.writerSheet(0, "统计").head(SaleTransferSummaryRateExportVo.class).build();             excelWriter.write(exportVos, writeSheet);             WriteSheet rateWriteSheet = EasyExcel.writerSheet(1, "明细").head(SaleTransferClassRateExportVo.class).build();             excelWriter.write(exportRateVos, rateWriteSheet);             excelWriter.close();             // 数据落地到OSS             String resultPath = ossClient.uploadFile(outputStream.toByteArray(), ContentMediaEnum.XLSX.getName(), FileExtEnum.XLSX.getName());             return resultPath;         } catch (Exception e) {             return "";         }     }
  我们项目是将文件传到 oss,然后去 oss 进行下载。也可以直接写入到文件或 responsepublic void doHandle() {         File file=new File("");         try(             com.alibaba.excel.ExcelWriter excelWriter = EasyExcel.write(file).build()) {              List exportVos = queryAction.querySummaryExport();             List exportRateVos = queryAction.queryClassRate();              WriteSheet writeSheet = EasyExcel.writerSheet(0, "统计").head(SaleTransferSummaryRateExportVo.class).build();             excelWriter.write(exportVos, writeSheet);             WriteSheet rateWriteSheet = EasyExcel.writerSheet(1, "明细").head(SaleTransferClassRateExportVo.class).build();             excelWriter.write(exportRateVos, rateWriteSheet);         } catch (Exception e) {             log.error("导出异常",e);         }     }
  只需要修改 write 的参数即可。
  主要的代码就完成了,那么数据的属性和 excel 列名称怎么对应上的呢?
  在数据的实体类上加上@ExcelProperty 注解就行了。它就能自动创建列头,并将数据对应写入。@ColumnWidth 列宽度@ExcelIgnore 代表不用导出的属性DateTimeFormat 日期格式化public class SaleTransferSummaryRateExportVo {      @ExcelProperty("老师昵称")     @ColumnWidth(10)     private String teacherName;      @ExcelProperty("大区")     private String regionName;      @ExcelProperty("小组")     private String groupName;      @ExcelProperty("创建时间")     @DateTimeFormat("yyyy-MM-dd")     private Date createTime;  }
  写完之后觉得表格有点丑,于是又调了下样式。也是几个注解搞定@HeadStyle(fillPatternType = FillPatternTypeEnum.SOLID_FOREGROUND, fillForegroundColor = 44) @HeadFontStyle(fontHeightInPoints = 10) @ContentFontStyle(fontHeightInPoints = 10) public class SaleTransferSummaryRateExportVo {   @ExcelProperty("老师昵称")     private String teacherName;      @ExcelProperty("大区")     private String regionName;      @ExcelProperty("小组")     private String groupName;      @ExcelProperty("创建时间")     @DateTimeFormat("yyyy-MM-dd")     private Date createTime;  }
  fillForegroundColor 的值就代表颜色,具体什么值代表什么颜色,可以参考 IndexedColors 枚举类。
  就这样就完成了。导出效果图如下:
  遇到的坑
  1、版本问题
  我最开始用的版本是这样的,因为项目里之前就引入了 poi       org.apache.poi     poi-ooxml     3.17       com.alibaba     easyexcel     3.1.2 
  版本不对的时候写入直接报错。
  异常信息如下:Exception in thread "main" com.alibaba.excel.exception.ExcelGenerateException: java.lang.NoSuchMethodError: org.apache.poi.ss.usermodel.Cell.setCellValue(Ljava/time/LocalDateTime;)V 	at com.alibaba.excel.write.ExcelBuilderImpl.addContent(ExcelBuilderImpl.java:65) 	at com.alibaba.excel.ExcelWriter.write(ExcelWriter.java:70) 	at com.alibaba.excel.ExcelWriter.write(ExcelWriter.java:47) 	at cn.jojo.sales.app.task.ExportSalesTransferSummaryTask.main(ExportSalesTransferSummaryTask.java:90) Caused by: java.lang.NoSuchMethodError: org.apache.poi.ss.usermodel.Cell.setCellValue(Ljava/time/LocalDateTime;)V 	at com.alibaba.excel.write.executor.AbstractExcelWriteExecutor.converterAndSet(AbstractExcelWriteExecutor.java:95) 	at com.alibaba.excel.write.executor.ExcelWriteAddExecutor.addJavaObjectToExcel(ExcelWriteAddExecutor.java:174) 	at com.alibaba.excel.write.executor.ExcelWriteAddExecutor.addOneRowOfDataToExcel(ExcelWriteAddExecutor.java:82) 	at com.alibaba.excel.write.executor.ExcelWriteAddExecutor.add(ExcelWriteAddExecutor.java:58) 	at com.alibaba.excel.write.ExcelBuilderImpl.addContent(ExcelBuilderImpl.java:59) 	... 3 more
  2、excelWriter 要关闭excelWriter.close();
  我之前因为 excelWriter 的定义是是写在 try 里的,所以没有 close,但是我的用法又是将 excelWriter 写入到字节流,然后字节流传到 oss,而且这个步骤也是在 try 里面。就导致了我一直写入不成功,后来才发现,浪费了一点时间。

什么样的男人到了晚年会过得凄凉?躺上床上,大小便失禁,无人照顾,疼痛难忍,生不如死,阎王爷不收,这样的晚年最凄凉悲惨。愿我们活得快乐,死得快速,一心向善,佛在心中。1中年离异,孤单一个人。2没养老金,花销不方便。起亚的嘉华怎么样?嘉华的外观挺漂亮的,在7座车子中,我觉得也算是高颜值,高B格的一款了,特别是白色的展车,特别的出众,气质是真的好,感觉比GL8还要吸睛。巨大的进气格栅已经成为了近年燃油车型的设计趋什么海鱼便宜又好吃呢?简单地说,价格亲民又味道鲜美的海鱼还是可以选出不少的。与淡水鱼相比,海鱼进化的层次更高,肌间小刺更少,肉质更加紧致,不饱和脂肪酸含量更高,没有那种特殊的土腥味。所以,味道更加鲜美,作为京剧票友,你是否觉得陶阳的京剧水平被过誉了?本人算不上票友,只能说是戏迷罢了。个人认为陶阳(陶云圣)的京剧水平并未被过誉,主要有以下三方面原因第一陶阳(陶云圣)的京剧水平,从他加入德云社前就已经被京剧业内认可和高度评价了。在魔兽世界60年代猎人玩家都喜欢带野猪类宠物,是因为养不起吃肉的宠物吗?职业机制一直是打算入坑魔兽世界怀旧服的玩家讨论最多的话题之一,尤其是一些职业劝退方面的问题,往往有一些传言传着传着就被很多没有经历过60年代的玩家信以为真了,比如魔兽世界60年代猎为什么一些七八十岁的老人病情反反复复,出院不久又需要住院?您好,希望我的回答能够帮助您。为什么年龄大些的人病了需要反复住院?我认为原因有以下几个方面。第一个,年龄大的人身体老化,大多数会有慢性疾病。比如说高血压,糖尿病,冠心病,慢性支气管老人带孙子,明知道孩子做错了,也不舍得批评,怎么办?老人不舍得批评孙子很正常,也很常见,一是不舍得,因为他们当孙子是宝贝,二也担心批评小孩后,孩子爸爸妈妈会不会有意见,三怕自己的教育方式过时了,不懂怎样批评怎样教。对于老人的这种行为各位,社保断缴,连续工龄认定就要从0开始吗?我们大部分人都是劳动合同制员工,只和工作年限社保缴费年限有关系,那么工龄这个说法,对于我们来说已经没有什么关联了。工龄是历史遗留的叫法,是社保双轨制时的产物,也就是以前虽然员工没有女性腿粗屁股大是怎么回事?其实仔细观察不难发现,有不少女性其实都有大腿或臀部丰满的特点,男性就不多吧,除非是超重或肥胖,一般匀称的男性很少有说看上去大腿和臀部相对丰满的。其中一个重要因素是源于雌性激素的效果同是500M光纤,为什么电信网络就是要比移动稳定?移动没有骨干网,移动是租,联通和电信的骨干网。移动用户先接入移动的网络,接入移动的服务器。移动的服务器,再接入电信和联通的骨干网。相当于移动是一个大局域网,自己有服务器。如果你要访亚马逊里的ERP是什么?erp就是一个后台操作系统,提高工作效率。谢谢邀请!关于Erp系统用途我讲精辟的1。Erp管理系统分很多种,主要看公司需求,定制功能!不适合做精品类公司!下面听我细说!!2。适合亚
干货来了!30个一定要知道美白成分!一定要收藏必须收藏!30个一定要知道的成分!美白抗老祛痘皮肤问题全解决干货来了!这期整理了30种常见的护肤品成分,每种成分对应的作用都做了详细科普,大噶可以根据自己想要解决的皮肤问题,找到相终于,我get到了条纹的妙处,早秋穿搭果然少不了它无论时尚潮流怎么起落,总有一些经典永不落幕,比如条纹。印象中,法式穿搭永远少不了条纹衫。尤其是每到秋天,各种条纹衫就会按时出现在不同年龄段的女人身上,从纯棉到针织,条纹衫似乎永远都微胖的30岁女人,如何穿更显瘦?学这位博主这样穿,洋气又好看季节更替转眼间我们又迎来了一年的秋天,而对于微胖型身材的女人来说,换季无疑是一个新的挑战,不仅要规避身材上的短板,还得在此基础上满足温度风度的双重需求。如果你也有类似的困扰,那可千屈臣氏里经常被忽略的好货,女生逛街看见,别错过很多人在逛街的时候都喜欢去逛逛屈臣氏,但是你逛完过屈臣氏吗,这些屈臣氏里经常被忽略的好货,建议女生逛街的时候看见了,别错过。一次性洗脸巾大家都知道屈臣氏是有不同的区域的,并不是只有荣耀302010等一系列机型将于明年升级HarmonyOS3IT之家9月7日消息,在昨日的华为Mate50系列及全场景新品秋季发布会上,华为公布了鸿蒙HarmonyOS3的具体升级时间表,首日便有4款智能音箱产品开启全网升级,还有27款设备日媒日本政府网站遭网络攻击这一黑客组织认领中新网9月7日电据日本共同社报道,日本内阁网络安全中心(NISC)6日表示,政府运营的行政信息门户网站eGov遭到网络攻击,造成了无法访问等问题。据NISC称,6日下午4点半左右起Mate50系列受追捧,别迷信麒麟9000了,骁龙8才是正确的选择时隔两年,华为Mate50系列终于来了,不过这次的Mate系列有点不同,因为这次华为没有带来大家期待的新款麒麟芯片,而之前的Mate系列发布会上面,首发麒麟芯片属于传统节目,不过这广西富豪冯小华41岁贷款创业,如今身价80亿点击上方关注你的支持是我创作的动力文榴莲上个世纪九十年代,国内不断涌现出一批下海的有志青年,就像新希望集团的刘永好,通威集团的刘汉元,他们原本都有着稳定的工作,但最后都辞职下海,并这尴尬剃须品牌!虽不及飞利浦,却靠小米有品14天卖28万台男人最注重的就是面子,而这就需要从剃须开始。一晚上过后,周边上面肯定会出现小胡茬,看起来会觉得很邋遢。只有剃须才能快速提升颜值,让你看着会更干净,只需要花费2分钟的时间,就能让你的OPPO超算平台立大功!大V实测ColorOS13后台驻留及续航优化明显文Monster低语不管是手机还是电脑端,后台驻留能力总是与功耗挂上勾,一般来讲,手机留存后台越多,也就会更耗电。那为什么iOS后台可以保留那么多,功耗却没想象中那么高呢?除了因为颜色丰富多样,选择三星GalaxyZFold4凸显个人品位三星手机大家应该并不陌生,从成立到现在始终坚持不懈,三星在手机领域不断创新,事实证明这样的坚持是对的,因为这个品牌每次推出新产品都会得到大众的信赖,此次三星GalaxyZFold4