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

阿里巴巴Excel读写组件EasyExcel入门实践

  前言
  最近在开发一个运营端的系统,而运营端系统,经常有数据通过Excel文件上传、导出的功能,也就是涉及到Excel文件的读写操作。
  我们都知道,在Java开发中,Excel相关的操作,我们都使用POI进行开发。但是Excel文件的读写,经常有这么一个场景,就是涉及到大量数据的读写,使用POI经常会遇到机器内存使用率过高的问题,而EasyExcel就很好地解决了这个问题。Excel导出
  我们先进行简单的Excel数据导出实践。
  1.Maven依赖
  可以到mvnrepository上搜索EasyExcel,选择一个最新的版本即可。     com.alibaba     easyexcel     3.1.3 
  笔者采用的,是目前最新的3.1.3版本,生产环境还是建议使用稳定版。
  2.MySQL数据
  生产环境Excel数据导出,一般都是从MySQL数据库中获取。为了贴近正常场景,我们事先在MySQL上存储部分数据,然后试着将这些数据通过Excel格式导出。
  3.Excel对象映射
  EasyExcel有一个很不错的设计,就是Excel文件的列,是和Java对象的字段,一一对应的。这点和操作MySQL、JPA一样,毕竟Excel也可以理解为一个关系数据库文件。package com.example.springbooteasyexcel.domain;  import com.alibaba.excel.annotation.ExcelProperty; import lombok.Data;  import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.Table; import java.math.BigDecimal; import java.util.Date;  /**  * 商品信息  *  * @author hongcunlin  */ @Entity @Data @Table public class ProductInfo {     /**      * 自增ID      */     @Id     @GeneratedValue     @ExcelProperty("商品id")     private Long id;      /**      * 商品名      */     @ExcelProperty("商品名称")     private String name;      /**      * 商品价格      */     @ExcelProperty("商品价格")     private BigDecimal price;      /**      * 创建时间      */     @ExcelProperty("商品创建时间")     private Date createTime = new Date(); }
  通过@ExcelProperty注解,是Excel列和Java对象中的字段对应起来。
  4.Excel导出HTTP接口
  通过JPA将数据从MySQL中读取出来,通过EasyExcel将数据通过Excel文件导出。package com.example.springbooteasyexcel.controller;  import com.alibaba.excel.EasyExcel; import com.example.springbooteasyexcel.domain.ProductInfo; import com.example.springbooteasyexcel.repository.ProductInfoRepository; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;  import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.List;  /**  * Excel读写HTTP接口  *  * @author hongcunlin  */ @RestController @RequestMapping("/productInfoController") public class ProductInfoController {     /**      * 商品信息repository      */     @Resource     private ProductInfoRepository productInfoRepository;      /**      * Excel数据导出      *      * @param response excel文件      * @throws IOException e      */     @GetMapping("/exportProductInfo")     public void exportProductInfo(HttpServletResponse response) throws IOException {         List productInfoList = productInfoRepository.findAll();         response.setContentType("application/vnd.ms-excel");         response.setCharacterEncoding("utf-8");         response.setHeader("Content-disposition", "attachment;filename=test.xlsx");         EasyExcel.write(response.getOutputStream(), ProductInfo.class).sheet().doWrite(productInfoList);     } }
  Excel导出的API使用起来还是很简单,它导出完Excel数据,还会帮你关闭文件流,这点很关键。
  5.Excel导出测试
  我们访问我上面编写的接口,即可得到我们想要的Excel文件了,内容如下:
  符合我们的预期。Excel上传
  Excel上传写起来,稍微复杂一点点,主要是多了一个Excel读取的监听器
  1.Excel监听器package com.example.springbooteasyexcel.listener;  import com.alibaba.excel.context.AnalysisContext; import com.alibaba.excel.event.AnalysisEventListener; import com.alibaba.excel.metadata.CellExtra; import com.example.springbooteasyexcel.domain.ProductInfo; import lombok.Getter;  import java.util.ArrayList; import java.util.List;  /**  * 商品列表导出监听器  *  * @author hongcunlin  */ @Getter public class ProductInfoListener extends AnalysisEventListener {     /**      * 商品列表      */     private final List productInfoList = new ArrayList<>();      @Override     public void onException(Exception exception, AnalysisContext context) throws Exception {         super.onException(exception, context);     }      @Override     public void invoke(ProductInfo productInfo, AnalysisContext analysisContext) {         productInfoList.add(productInfo);     }      @Override     public void extra(CellExtra extra, AnalysisContext context) {         super.extra(extra, context);     }      @Override     public void doAfterAllAnalysed(AnalysisContext analysisContext) {      }      @Override     public boolean hasNext(AnalysisContext context) {         return super.hasNext(context);     } }
  主要继承AnalysisEventListener父类,并实现了相关方法。主要是invoke方法,里边是Excel数据读取之后的处理逻辑。
  2.Excel文件上传HTTP接口package com.example.springbooteasyexcel.controller;  import com.alibaba.excel.EasyExcel; import com.example.springbooteasyexcel.domain.ProductInfo; import com.example.springbooteasyexcel.listener.ProductInfoListener; import com.example.springbooteasyexcel.repository.ProductInfoRepository; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile;  import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.util.List;  /**  * Excel读写HTTP接口  *  * @author hongcunlin  */ @Slf4j @RestController @RequestMapping("/productInfoController") public class ProductInfoController {     /**      * 商品信息repository      */     @Resource     private ProductInfoRepository productInfoRepository;      /**      * Excel数据上传      *      * @param file excel文件      * @throws IOException e      */     @PostMapping(value = "/uploadProductInfo", headers = "content-type=multipart/form-data")     public void uploadProductInfo(MultipartFile file) throws IOException {         ProductInfoListener productInfoListener = new ProductInfoListener();         EasyExcel.read(file.getInputStream(), ProductInfo.class, productInfoListener).sheet().doRead();         productInfoRepository.saveAll(productInfoListener.getProductInfoList());     } }
  和Excel文件读取差不多,也是很简洁的API,不再赘述。
  3.准备Excel数据
  我们编写2条Excel数据,后面用于文件的上传
  4.上传测试
  我们通过Swagger2提供的界面,进行Excel文件的上传测试。
  可以看到,我们上传的Excel文件中的数据,已经导入数据库中了,符合我们的预期。其他
  本文通过EasyExcel,轻松的进行了Excel文件的读取。本文是入门实践篇,后面关于Excel更多的细节,笔者有空再另起文章。

沉默的英雄,无声的奉献老战士罗锦文深藏功名的平凡人生2022年11月11日上午,浙江省平湖市第一人民医院,消化科内镜室主任医师王明友正在为一位吞咽困难的96岁老人做食道支架置入手术。突然,医生的眉头紧皱起来在X射线下,发现老人右侧肩2023年长城徒步之三承载历史记忆的张家口大境门段长城2023年3月11日,随悦游队徒步张家口大境门段长城,之前只在大境门景区看过一眼,除了大境门,对其他的印象都不深,只有用脚步丈量过的地方,才会记忆深刻。本次行程从五墩台村附近进山,汉末三国历史回顾二袁争霸之夺取冀州前文说到袁绍在董卓迁都后,欲立德高望重的汉室宗亲幽州牧刘虞为新皇帝,试图以拥立之功建立自己的政治优势。后因刘虞坚决反对而使得计划泡汤,亲兄弟袁术也借由此事与之彻底决裂。本文重点介绍春分时间怎么定?一起来看古人的时间管理智慧视频加载中北京时间3月21日5时24分我们迎来了春分节气作为平分春色的春季C位节气春分是如何被确定的?它是一段时间还是一个时刻?为什么有立蛋习俗?这份学习笔记赶紧收藏!看见节气!春史密斯致命3分,格林2566,波特2056,火箭114112绝杀鹈鹕北京时间3月18日NBA火箭队主场应战鹈鹕队,其首发阵容为小波特杰伦。格林小马丁史密斯申京鹈鹕队首发为琼斯麦科勒姆英格拉姆墨菲瓦兰。鹈鹕队今天瓦兰和英格拉姆一内一外组合,携手发威,恩比德三节381354帽哈登三双76人大胜黄蜂迎7连胜直播吧3月18日讯NBA常规赛,黄蜂今日迎战76人,前者三连败后排在东部倒数第二位,后者则是六连胜暂列东部第三位,此役马丁和马克威廉姆斯缺战。比赛上来,两队就陷入到拉锯战,场上比分0。4秒极限绝杀!这支火箭让人无限遐想今日,NBA常规赛继续进行,休斯顿火箭坐镇主场迎战新奥尔良鹈鹕的比赛已经结束。全场战罢,火箭以114112力擒鹈鹕。本场比赛,火箭探花郎小贾巴里史密斯虽然仅仅交出了8中5,其中三分康利若爱德华兹缺阵那我必须更有侵略性和自信心直播吧3月18日讯今日NBA常规赛,森林狼在客场以131139双加时不敌公牛。赛后,康利接受了记者采访。在被问及如果爱德华兹缺阵他需要怎么做时,他说道我必须打得更有侵略性更自信,我市纪委监委召开护航营商环境打造亲清岛城纪委监委在行动动员部署会视频加载中青岛广电爱青岛3月21日讯今天上午,市纪委监委召开护航营商环境打造亲清岛城纪委监委在行动动员部署会。市委常委市纪委书记市监委主任马立新出席会议并讲话。会议强调,要聚焦政务央视直播!今天WTT新加坡大满贯赛程出炉,孙颖莎有望夺得第2金赛事前瞻在已经结束的比赛中,国乒球员整体发挥较好,男女单打方面钱天一41击败奥地利选手波尔卡诺娃,率先晋级女单半决赛马龙则以40轻松击败德乒球员邱党而王曼昱以41大胜摩纳哥球员杨晓激发运动风潮第六届进博会举办体育用品及赛事专区宣介会21世纪经济报道记者李依农上海报道3月17日,第六届中国国际进口博览会举办体育用品及赛事专区宣介会。(宣介会现场。图片来源进博局供图)国家会展中心(上海)总裁宁风在会上表示,进博会
iPad10发布,比iPhone14更让人失望,网友痛批太不环保正如此前预料,苹果没有召开发布会突然上架大量新品,其中的主角当然是新款iPad系列,仔细了解配置后才发现太让人失望。不少网友痛批虽然有所升级,但仍然难掩苹果假环保,整体表现比iPh网友三里屯偶遇刘亦菲逛街,黑色柔顺秀发超惹眼,口罩难挡天仙美貌近日,有网友在三里屯逛街的时候偶遇了刘亦菲,只见她穿着黑色大衣,围着一条某大牌的围巾,打扮得十分精致。更让人注意的是,刘亦菲的一头秀发乌黑柔顺,非常漂亮。虽然刘亦菲戴着口罩,但是标陈冲拍时尚大片好有范,穿丝绸裙风韵犹存,61岁还是女神般的存在女性在穿衣打扮的时候,都会比较注重整体带来的效果,从服装单品到配饰点缀以及搭配的方式,都决定了最终呈现出来的造型。每一种风格走向,选择的服装都截然不同,比如优雅风,自然会以连衣裙为RedmiNote12系列在京东上市,新型号揭晓RedmiNote12系列绰号已通过京东列表得到确认,这表明RedmiNote12ProExtreme可能即将推出。值得注意的是,RedmiNote12系列即将登陆中国。此外,据报iOS15。7。1正式发布,续航优化难以相信,史诗级提升,终极养老今天凌晨苹果向iPhone用户正式推送了iOS15。7。1版本,此次版本为RC版本,也被果粉们称为准正式版,虽然苹果低调表示只带来了安全更新,但不少果粉体验了一天之后发现,并不仅仅为何蚊子偏爱叮咬你?那是皮肤上的微生物在作祟极目新闻记者满达胡秀文如果你被蚊子咬了,应该责怪你皮肤上的微生物,它们产生的羧酸是你招蚊子的罪魁祸首。埃及伊蚊(图片来源韩联社)据韩联社10月19日报道,美国洛克菲勒大学的一个神经推进区域协同发展着力探索转型发展之路证券时报记者贺觉渊孙璐璐秦燕玲现场报道过去两天,党的二十大新闻中心举办多场集体采访。上海江苏山东广东等代表团新闻发言人介绍代表团学习讨论党的二十大报告情况,并回答记者提问。在集体采睡前吃什么食物最好?研究表明,睡前吃香蕉可以帮助睡眠,提高睡眠质量,这一说法得到科学的支持。色氨酸是人体不能合成的必需氨基酸,香蕉是色氨酸的极好来源。色氨酸进入体内后,转化为血清素,是褪黑激素的前体,警惕,食品添加剂竟然可能影响肠道菌群一项来自悉尼大学的研究显示,存在于许多食物中的常见添加剂二氧化钛纳米微粒E171可能会对人体健康产生实质性伤害。研究人员分析了食品添加剂E171(俗称钛白粉)对健康的不良影响。E1中老年人要注重平衡膳食(准则三)中国居民膳食指南(2022)平衡膳食准则共8条准则三多吃蔬果奶类全谷大豆蔬菜水果奶类和大豆及其制品是平衡膳食的重要组成部分,坚果是膳食的有益补充。蔬菜和水果是维生素矿物质膳食纤维和经常吃大蒜是爱肝还是害肝?医生说出实情,别不听劝现在我们生活都非常忙碌,很多人都吃腻了荤菜,可以多给家里人做一些素菜和凉拌菜,比方说蒜蓉空心菜和蒜蓉油麦菜等等。有这么几种调料是生活中不可缺少的,大蒜大葱和生姜称作为去腥三剑客!葱