当前位置:   article > 正文

【EasyExcel-Alibaba】在Java中操作Excel 完成数据的导入导出_com.yeahka.easyexcel.util.easyexcelutil

com.yeahka.easyexcel.util.easyexcelutil

快速入门

引入依赖

构建实体类

数据导出

参数

WriteWorkbook

WriteSheet

WriteTable

测试

数据导入

测试


        EasyExcel是阿里巴巴开源的一个excel处理框架,以使用简单、节省内存著称。EasyExcel能大大减少占用内存的主要原因是在解析Excel时没有将文件数据一次性全部加载到内存中,而是从磁盘上一行行读取数据,逐个解析。EasyExcel采用一行一行的解析模式,并将一行的解析结果以观察者的模式通知处理(AnalysisEventListener)。

GitHub地址:GitHub - alibaba/easyexcel: 快速、简洁、解决大文件内存溢出的java处理Excel工具

快速入门

引入依赖

  1. <dependency>
  2. <groupId>com.alibaba</groupId>
  3. <artifactId>easyexcel</artifactId>
  4. <version>3.2.0</version>
  5. </dependency>

构建实体类

  1. @Data //为实体类提供set、get方法
  2. public class User {
  3. //此注解用于Excel的表头
  4. @ExcelProperty("用户姓名")
  5. private String username;
  6. @ExcelProperty("用户性别")
  7. private String sex;
  8. @ExcelProperty("用户年龄")
  9. private Integer age;
  10. //此注解会在数据导出之后忽略该字段
  11. @ExcelIgnore
  12. private String address;
  13. }

数据导出

参数

  • WriteWorkbook 可以理解成一个excel
  • WriteSheet 理解成一个excel里面的一个表单
  • WriteTable 一个表单里面如果有多个实际用的表格,则可以用WriteTable

这是三个参数都有的通用参数,如果这些均为空,那么默认使用上级。

名称默认值描述
converter默认加载了很多转换器,这里可以加入不支持的字段
writeHandler写的处理器。可以实现WorkbookWriteHandler,SheetWriteHandler,RowWriteHandler,CellWriteHandler,在写入excel的不同阶段会调用
relativeHeadRowIndex0写入到excel和上面空开几行
headclazz二选一。读取文件头对应的列表,会根据列表匹配数据,建议使用class
clazzhead二选一。读取文件的头对应的class,也可以使用注解。如果两个都不指定,则会读取全部数据
autoTrimtrue会对头、读取数据等进行自动trim
use1904windowingfalseexcel中时间是存储1900年起的一个双精度浮点数,但是有时候默认开始日期是1904,所以设置这个值改成默认1904年开始
useScientificFormatfalse数字转文本的时候在较大的数值的是否是否采用科学计数法
needHeadtrue是否需要写入头到excel
useDefaultStyletrue是否使用默认的样式
automaticMergeHeadtrue自动合并头,头中相同的字段上下左右都会去尝试匹配
excludeColumnIndexes需要排除对象中的index的数据
excludeColumnFieldNames需要排除对象中的字段的数据
includeColumnIndexes只要导出对象中的index的数据
includeColumnFieldNames只要导出对象中的字段的数据

WriteWorkbook

  1. EasyExcel.write(fileName, User.class)
  2. //在write方法之后,在 sheet方法之前都是设置WriteWorkbook的参数
  3. .sheet("模板")
  4. .doWrite(传入的数据);

WriteSheet

  1. EasyExcel.write(fileName, User.class)
  2. .sheet("模板")
  3. //在sheet方法之后,在 doWrite方法之前都是设置WriteSheet的参数
  4. .doWrite(传入的数据);

WriteTable

  1. EasyExcel.write(fileName, User.class)
  2. .sheet("模板")
  3. .table()
  4. //在table方法之后,在 sheet方法之前都是设置WriteTable的参数
  5. .doWrite(传入的数据);

测试

  1. public class TestWrite {
  2. public static void main(String[] args) {
  3. String fileName = "C:\\Users\\Administrator\\Desktop\\EasyExcel\\用户信息.xlsx";
  4. //创建一个集合放入用户信息
  5. List<User> list = new ArrayList<>();
  6. list.add(new User("张三","男",18,"福建省"));
  7. list.add(new User("李四","女",17,"浙江省"));
  8. list.add(new User("王五","男",22,"江西省"));
  9. list.add(new User("赵六","男",19,"江苏省"));
  10. list.add(new User("小七","女",20,"广东省"));
  11. //这里用到了EasyExcel的写功能
  12. //write传入文件导出位置以及写入信息的字节码文件
  13. //sheet传入模板内容
  14. //doWrite用于将传入的数据进行分页查询
  15. EasyExcel.write(fileName, User.class).sheet("UserTable").doWrite(list);
  16. }
  17. }

数据导入

  1. public class TestRead {
  2. public static void main(String[] args) {
  3. String fileName = "C:\\Users\\Administrator\\Desktop\\EasyExcel\\用户信息.xlsx";
  4. EasyExcel.read(fileName, User.class,new ExcelListener())
  5. .sheet()
  6. //doRead()方法用于关闭读取流
  7. .doRead();
  8. }
  9. }

  1. public class ExcelListener extends AnalysisEventListener<User> {
  2. /**
  3. * 一行一行读取Excel内容,从第二行开始读取
  4. * @param user
  5. * @param analysisContext
  6. */
  7. @Override
  8. public void invoke(User user, AnalysisContext analysisContext) {
  9. System.out.println(user);
  10. }
  11. @Override
  12. public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
  13. System.out.println("表头信息" + headMap);
  14. }
  15. /**
  16. * 读取完Excel后执行
  17. * @param analysisContext
  18. */
  19. @Override
  20. public void doAfterAllAnalysed(AnalysisContext analysisContext) {
  21. System.out.println("读取完Excel后执行");
  22. }
  23. }

测试

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/pjghi/article/detail/61101
推荐阅读
相关标签
  

闽ICP备14008679号