跟着狂神学POI和EasyExcel

本文介绍了Java中用于处理Excel的POI库和EasyExcel工具。POI提供了对03版和07版Excel的支持,但在处理大量数据时可能导致内存溢出。相比之下,EasyExcel进行了优化,能有效避免内存溢出问题。文章通过代码示例展示了如何使用POI进行文件创建、批量导入及读取操作,并对比了EasyExcel的简便写入和读取方式。
摘要由CSDN通过智能技术生成

POI和EasyExcel

狂神视频 https://www.bilibili.com/video/BV1Ua4y1x7BK

POI和EasyExcel都可以进行读写,但你使用最原生的io也可以进行读写,只不过比较麻烦

所以目前最流行的POI和EasyExcel这两个第三方组件、工具 就诞生了

使用场景
在这里插入图片描述
POI

POI比较复杂,量比较大的化会产生OOM
在这里插入图片描述
基本功能
HSSF对应着03版的excel,XSSF对应着07版的excel
在这里插入图片描述
EasyExcel

比POI简单并对其进行了优化,再大也不会有内存溢出
在这里插入图片描述
在这里插入图片描述
内存问题:
POI要读100w行会先加载到内存,众所周知内存很少,所以会报OOM
EasyExcel要读100w行,它是一行一行的读写,所以不会报OOM

创建poi项目

导入依赖,放入poi依赖的默认格式和ooxml格式

<dependencies>
        <!--xls(03)-->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.9</version>
        </dependency>
        <!--xlsx(07)-->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.9</version>
        </dependency>
        <!--日期格式化工具-->
        <dependency>
            <groupId>joda-time</groupId>
            <artifactId>joda-time</artifactId>
            <version>2.10.1</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
    </dependencies>

03的样式
在这里插入图片描述
03版本代码
记住path路径后面加\\要不然生成不出来

public class ExcelWriteTest {
   
    //项目路径
    String PATH="D:\\IdeaProjects\\kuang-poi\\";
    @Test
    public void testWrite03() throws Exception {
   
        //1.创建一个工作薄
        Workbook workbook=new HSSFWorkbook();
        //2.创建一个工作表
        Sheet sheet=workbook.createSheet("统计表");
        //3.创建一行,0是第一行
        Row row1=sheet.createRow(0);
        //4.创建一个单元格,定位是(1,1)
        Cell cell1 = row1.createCell(0);
        cell1.setCellValue("今日观众");
        //定位为(1,2)写数据为666
        Cell cell2=row1.createCell(1);
        cell2.setCellValue(666);
        //第二行(2,1)
        Row row2=sheet.createRow(1);
        Cell cell21 = row2.createCell(0);
        cell21.setCellValue("统计时间");
        //(2,2)
        Cell cell22 = row2.createCell(1);
        String time = new DateTime().toString("yyyy-MM-dd HH:mm:ss");
        cell22.setCellValue(time);
        //生成一张表   03版本就是使用xls结尾
        FileOutputStream fileOutputStream = new FileOutputStream(PATH + "统计03.xls");
        //输出
        workbook.write(fileOutputStream);
        //关闭流
        fileOutputStream.close();
        System.out.println("03版本生成完毕");
    }
}

07版本代码

大致一样但是是XSSFworkbook结尾已xlsx结尾

@Test
    public void testWrite07() throws Exception {
   
        //1.创建一个工作薄
        Workbook workbook=new XSSFWorkbook();
        //2.创建一个工作表
        Sheet sheet=workbook.createSheet("统计表");
        //3.创建一行,0是第一行
        Row row1=sheet.createRow(0);
        //4.创建一个单元格,定位是(1,1)
        Cell cell1 = row1.createCell(0);
        cell1.setCellValue("今日观众");
        //定位为(1,2)写数据为666
        Cell cell2=row1.createCell(1);
        cell2.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值