EasyExcel学习笔记

EasyExcel 用于 Java解析、生成Excel,是一个基于Java的简单、省内存的读写Excel的开源项目。在尽可能节约内存的情况下支持读写百M的Excel。

官方文档地址:https://alibaba-easyexcel.github.io/index.html 。

1.excel导出步骤

第一步,添加依赖。

<dependencies><!-- https://mvnrepository.com/artifact/com.alibaba/easyexcel --><dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.1.1</version></dependency>
</dependencies>

第二步,创建实体类。在对应属性上添加注解 @ExcelProperty 来设置表头。

@Data
public class UserData {@ExcelProperty("用户编号")private int uid;@ExcelProperty("用户名称")private String username;}

第三步,执行 excel 的导出。

/*** Parker**/
public class TestExcel {public static void main(String[] args) {//构建数据list集合List<UserData> list = new ArrayList<>();for (int i = 0; i < 10; i++) {UserData userData = new UserData();userData.setUid(i);userData.setUsername("user" + i);list.add(userData);}//设置excel文件路径和文件名称String fileName = "D:\\workplace\\IMedi_excel";//调用方法实现写操作EasyExcel.write(fileName, UserData.class).sheet("用户信息").doWrite(list);}
}

2.excel导入步骤

第一步,修改实体类。在注解 @ExcelProperty 上添加属性来指定属性所要读取的对应列号。

@Data
public class UserData {@ExcelProperty(value = "用户编号", index = 0)private int uid;@ExcelProperty(value = "用户名称", index = 1)private String username;}

第二步,创建一个监听器。在监听器里编写读取方法。

@Slf4j
public class ExcelListener extends AnalysisEventListener<UserData> {/*** 1.一行一行读取excel内容,从第二行开始读取(不读取表头信息)* @param userData* @param analysisContext*/@Overridepublic void invoke(UserData userData, AnalysisContext analysisContext) {log.info(userData.toString());}/*** 2.读取表头信息* @param headMap* @param context*/@Overridepublic void invokeHead(Map<Integer, CellData> headMap, AnalysisContext context) {log.info("表头信息:{}",headMap);}/*** 3.读取之后执行* @param analysisContext*/@Overridepublic void doAfterAllAnalysed(AnalysisContext analysisContext) {log.info("读取完成了...");}
}

第三步,执行 excel 的读取。

/*** Parker**/
public class TestExcel {public static void main(String[] args) {//设置excel文件路径和文件名称String fileName = "D:\\workplace\\IMedi_excel\\01.xlsx";//调用方法实现读操作EasyExcel.read(fileName,UserData.class,new ExcelListener()).sheet().doRead();}
}

读取成功,输出日志信息。

22:56:01.107 [main] DEBUG com.alibaba.excel.context.AnalysisContextImpl - Began to read:ReadSheetHolder{sheetNo=0, sheetName='用户信息'} com.alibaba.excel.read.metadata.holder.ReadSheetHolder@47db50c5
22:56:01.148 [main] INFO ExcelListener - 表头信息:{0=用户编号, 1=用户名称}
22:56:01.228 [main] INFO ExcelListener - UserData(uid=0, username=user0)
22:56:01.229 [main] INFO ExcelListener - UserData(uid=1, username=user1)
22:56:01.229 [main] INFO ExcelListener - UserData(uid=2, username=user2)
22:56:01.230 [main] INFO ExcelListener - UserData(uid=3, username=user3)
22:56:01.230 [main] INFO ExcelListener - UserData(uid=4, username=user4)
22:56:01.230 [main] INFO ExcelListener - UserData(uid=5, username=user5)
22:56:01.231 [main] INFO ExcelListener - UserData(uid=6, username=user6)
22:56:01.231 [main] INFO ExcelListener - UserData(uid=7, username=user7)
22:56:01.231 [main] INFO ExcelListener - UserData(uid=8, username=user8)
22:56:01.231 [main] INFO ExcelListener - UserData(uid=9, username=user9)
22:56:01.232 [main] INFO ExcelListener - 读取完成了...

4.从Web中导出excel

要导出 HttpServletResponse 的数据,需要编写相应的Controller和Service。

Controller

    /*** 导出数据字典到Excel* @param response* @return*/@GetMapping("exportDictData")public void exportDictData(HttpServletResponse response){dictService.exportDictData(response);}

Service

    /*** 导出数据字典到Excel* @param response*/@Overridepublic void exportDictData(HttpServletResponse response) {//设置文件下载的请求头response.setContentType("application/vnd.ms-excel");response.setCharacterEncoding("utf-8");// 这里URLEncoder.encode可以防止中文乱码,但是easyexcel不会发生中文乱码!//String fileName = URLEncoder.encode("imedi智慧健康服务数据字典", "UTF-8");String fileName = "imediDictData";response.setHeader("Content-disposition", "attachment;filename="+ fileName + ".xlsx");//查询数据库List<Dict> dictList = baseMapper.selectList(null);List<DictEeVo> dictEeVoList = new ArrayList<>();for (Dict dict : dictList) {DictEeVo dictEeVo = new DictEeVo();//springframework下的BeanUtils.copyProperties是左拷贝到右BeanUtils.copyProperties(dict,dictEeVo);dictEeVoList.add(dictEeVo);}//调用方法执行写操作try {EasyExcel.write(response.getOutputStream(),DictEeVo.class).sheet("DictData").doWrite(dictEeVoList);} catch (IOException e) {log.error(e.getMessage());}}

5.从Web中导入excel到数据库

要导入 excel 到后端,需要编写相应的Controller和Service。

Controller

/*** 从Web中导入数据字典excel到数据库* @param file 变量名最好为file,否则前端可能出错* @return*/@PostMapping("importData")public Result importDictData(MultipartFile file){dictService.importDictData(file);return Result.ok();}

Service

    /*** 从Web中导入数据字典excel到数据库* @param file*/@Overridepublic void importDictData(MultipartFile file) {try {EasyExcel.read(file.getInputStream(),DictEeVo.class,new DictListener(baseMapper)).sheet().doRead();} catch (IOException e) {e.printStackTrace();}}

其中导入需要多一步,即创建监听器。

listener

@Slf4j
public class DictListener extends AnalysisEventListener<DictEeVo> {private DictMapper dictMapper;/*** ExcelEasy 官方推荐使用构造方法来注入mapper,因为其不支持Spring的IOC* @param dictMapper*/public DictListener(DictMapper dictMapper){this.dictMapper = dictMapper;}/*** 1.一行一行读取excel内容,从第二行开始读取(不读取表头信息)* @param dictEeVo* @param analysisContext*/@Overridepublic void invoke(DictEeVo dictEeVo, AnalysisContext analysisContext) {//调用方法添加到数据库Dict dict = new Dict();//springframework下的BeanUtils.copyProperties是左拷贝到右BeanUtils.copyProperties(dictEeVo,dict);dictMapper.insert(dict);}/*** 2.读取表头信息* @param headMap* @param context*/@Overridepublic void invokeHead(Map<Integer, CellData> headMap, AnalysisContext context) {}/*** 3.读取之后执行* @param analysisContext*/@Overridepublic void doAfterAllAnalysed(AnalysisContext analysisContext) {log.info("导入完成了...");}}

注:ExcelEasy 官方推荐使用构造方法来注入mapper,因为其不支持Spring的IOC。

EasyExcel学习笔记——本地excel的导入导出、Web端excel的导入导出相关推荐

  1. EasyExcel 学习笔记 - 读Excel

    EasyExcel 学习笔记 - 读Excel pom.xml 添加依赖 测试数据 实体类 自定义转换器 最简单的读 写法1 写法2 写法3 写法4 多行头(跳过N行) 读多个sheet 读全部 sh ...

  2. unity学习笔记-番外(3d模型的动作设计以及导入-2018版)材质的替换以及动作穿模(自己的手穿模到自己的其他部位)

    unity学习笔记-番外(3d模型的动作设计以及导入) 动作设计白嫖方法 方法一:小k网 需要注意的地方 方法二:mixamo 需要注意的地方 材质的替换 一 动作的穿模 2021.5.13更新 -2 ...

  3. 【Javaweb学习笔记】在Eclipse中创建Web项目

    [Javaweb学习笔记]在Eclipse中创建Web项目 哈喽大家好,这里是Java框架学习笔记专栏第二期 本期内容--在Eclipse中创建Web项目 前期回顾: 第一期--schema约束 笔者 ...

  4. 【Unity学习笔记】UnrealToUnity教程:(网上购买的素材导入Unreal+插件转Unity)

    [Unity学习笔记]UnrealToUnity教程: 最近想从Unreal那边化点缘借借素材,没想到踩到一个大坑 一,素材导入Unreal 这个教程比较多,根据素材的来源,传送门是以下这几个: 1. ...

  5. python如何修改excel数据库_python学习笔记-day7-2-【python从mysql数据库导数据到excel,读excel,修改excel】...

    这节说下如何用python把数据库里的数据导出到excel里,并如何读取excel, 修必excel等操作. 一.用python把数据库里的数据导出到excel里 1.导入如下的模块,没有的话需要安装 ...

  6. ESP32学习笔记(30)——BLE GATT服务端自定义服务和特征

    一.简介 1.1 低功耗蓝牙(BLE)协议栈 链路层(LL) 控制设备的射频状态,有五个设备状态:待机.广播.扫描.初始化和连接. 广播 为广播数据包,而 扫描 则是监听广播. GAP通信中角色,中心 ...

  7. Go语学习笔记 - gorm使用 - gorm处理错误 Web框架Gin(十)

    学习笔记,写到哪是哪. 接着上一篇文章:Go语学习笔记 - gorm使用 - 原生sql.命名参数.Rows.ToSQL | Web框架Gin(九)_的博客-CSDN博客 目前gorm对数据库的一些操 ...

  8. EasyExcel学习笔记

    一.初识EasyExcel 1. Apache POI 有过报表导入导出经验的同学,应该有听说或使用过POI. Apache POI是Apache软件基金会的开源函式库,提供跨平台的Java API实 ...

  9. 基于傅老师unity游戏教学的学习笔记(EX)将PMX格式的MMD模型导入unity并使用

    为了学习unity,开始游戏制作大业,我选择在bilibili上寻找unity游戏教学视频并边做边学,以此系列博客作为笔记. (EX)将PMX格式的MMD模型导入unity并使用 想做3D游戏,优秀的 ...

最新文章

  1. [4月21日]《51CTO 编辑部的外传》——剧本篇(上)
  2. 去重和分类后缀asp、php等路径 用python3写的
  3. webservice中jaxws:server 和jaxws:endpoint的区别
  4. Alpha 冲刺 (7/10)
  5. 从外卖员到程序员,自学3年终于转行成功,三面“拿下”拼多多,把经历分享给你们!
  6. php更新数据步骤,Thinkphp5模型更新数据方法
  7. Android的广播接收器BroadcastReceiver
  8. 【蓝桥杯历年题】2020蓝桥杯A组省赛第二场(10.17)【含蓝桥杯官网提交地址】
  9. Robotics 机器人运动学 DH参数建模
  10. Shiro面试题总结
  11. 机器学习中的数学——激活函数(二):双曲正切函数(Tanh函数)
  12. SharePoint 2019 图文安装教程
  13. stm32F407控制器在驱动电机等执行机构时,ADS1256采集模块出现死机现象,问题待解决
  14. 翻转课堂学习总结集—2015级
  15. 阿里云对腾讯企业邮箱设置域名解析
  16. 软工系列之--数据流图(DFD图)
  17. 对嵌入式系统进行版本控制的5个技巧
  18. APP性能优化--启动优化
  19. 超强的学习能力是怎样练就的~
  20. 小程序搜索框简单的实现

热门文章

  1. 人民大学计算机夏令营试题,中国人民大学信息学院2017年夏令营机试题目(考生回忆版)...
  2. 将树莓派配置为AP路由器
  3. Error running ‘Tomcat 8.5.51‘: Address localhost:4099 is already in usebaoc
  4. 概率密度变换公式 雅可比矩阵_学习笔记之——Jacobian matrix(雅可比矩阵)
  5. 前端报错duplicate attribute
  6. head/body内常用标签
  7. 后台管理系统【订单列表】
  8. xss靶场练习(二)之xss小游戏
  9. 十大软件应用关键性能指标
  10. acceptor 大法好