+EasyExcel学习

一、引入
       在一个项目系统中,只要运行了,就会产生很多数据,一般会采用分页显示,但是为了方便浏览数据,一般都会做一个功能,导出成excel,而为了添加数据,也会做一个导入excel功能,进行批量导入。而现在在市场有很多这方面的技术,如Apache poi、jxl。但是这两种技术都存在一个问题,就是非常的耗内存,虽然poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但poi还是有一些缺陷,比如07版Excel解压缩以及解压后存储都是在内存中完成的,内存消耗依然很大。
       而基于这一点,阿里巴巴开发出了EasyExcel,那么什么是EasyExcel?
二、EasyExcel简介
       EasyExcel的是由阿里巴巴团队开发的快速、简单避免OOM的java处理Excel工具。easyexcel重写了poi对07版Excel的解析,能够原本一个3M的excel用POI sax依然需要100M左右内存降低到几M,并且再大的excel不会出现内存溢出,03版依赖POI的sax模式。在上层做了模型转换的封装,让使用者更加简单方便。github地址:https://github.com/alibaba/easyexcel,文档地址:https://alibaba-easyexcel.github.io/index.html 。
三、EasyExcel之导入,导出
创建一个maven工程,导入依赖:

[XML] 纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
<dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>easyexcel</artifactId>
            <version>1.1.2-beat1</version>
        </dependency>
        <!--非必要包,可以简略掉get,set方法-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.2</version>
        </dependency>
        <!--测试-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>


读取的文件如下:

1.读取指定文件
  

[Java] 纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
/**
     *读取指定文件
     */
    @Test
    public void read(){
        /*文件路径*/
        String filePath = "D:\\user.xlsx";
        try(InputStream fileStream=new FileInputStream(filePath) ) {
            /*Sheet:表格对象,第一个参数代表表格的索引,即第几个表格,第二个参数是从第几行开始,默认第一行是0*/
            Sheet sheet=new Sheet(1,0);
            List<Object> read = EasyExcelFactory.read(fileStream, sheet);
            for (Object object :
                    read) {
                System.out.println(object);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

输出如下:

2.生成excel

[Java] 纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
@Test
   public void write() throws FileNotFoundException {
       // 生成EXCEL并指定输出路径
       OutputStream out = new FileOutputStream("D:\\out.xlsx");
       ExcelWriter writer = new ExcelWriter(out, ExcelTypeEnum.XLSX);
       // 设置,第一个参数是第几个表格,第二个参数是从第几行开始
       Sheet sheet = new Sheet(1, 0);
       //设置表格名
       sheet.setSheetName("sheet1");
       // 设置标题
       Table table = new Table(1);
       List<List<String>> titles = new ArrayList<List<String>>();
       titles.add(Arrays.asList("用户名"));
       titles.add(Arrays.asList("年龄"));
       titles.add(Arrays.asList("生日"));
       titles.add(Arrays.asList("地址"));
       table.setHead(titles);
       // 查询数据导出即可 比如说一次性总共查询出100条数据
       List<List<String>> userList = new ArrayList<>();
       for (int i = 0; i < 100; i++) {
           userList.add(Arrays.asList( "小明" + i, String.valueOf(i), new Date().toString(),"幸福路"+i+"号"));
       }
       writer.write0(userList, sheet, table);
       writer.finish();
 
 
   }


生成的表格:

发布了963 篇原创文章 · 获赞 11 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/xiaoyaGrace/article/details/105403416