apache POI入门demo(好像easyexcel用的更多)

maven

  <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi</artifactId>
                <version>3.16</version>
            </dependency>
            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi-ooxml</artifactId>
                <version>3.16</version>
            </dependency>

代码

:可以先写后读

package com.sky.test;

import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;

/**
 * 使用POI操作Excel文件
 */
public class POITest {

    /**
     * 通过POI创建Excel文件并且写入文件内容
     */
    public static void write() throws Exception{
        //在内存中创建一个Excel文件
        XSSFWorkbook excel = new XSSFWorkbook();
        //在Excel文件中创建一个Sheet页
        XSSFSheet sheet = excel.createSheet("info");
        //在Sheet中创建行对象,rownum编号从0开始
        XSSFRow row = sheet.createRow(1);
        //创建单元格并且写入文件内容
        row.createCell(1).setCellValue("姓名");
        row.createCell(2).setCellValue("城市");

        //创建一个新行
        row = sheet.createRow(2);
        row.createCell(1).setCellValue("张三");
        row.createCell(2).setCellValue("北京");

        row = sheet.createRow(3);
        row.createCell(1).setCellValue("李四");
        row.createCell(2).setCellValue("南京");

        //通过输出流将内存中的Excel文件写入到磁盘
        FileOutputStream out = new FileOutputStream(new File("D:\\info.xlsx"));
        excel.write(out);

        //关闭资源
        out.close();
        excel.close();
    }


    /**
     * 通过POI读取Excel文件中的内容
     * @throws Exception
     */
    public static void read() throws Exception{
        InputStream in = new FileInputStream(new File("D:\\info.xlsx"));

        //读取磁盘上已经存在的Excel文件
        XSSFWorkbook excel = new XSSFWorkbook(in);
        //读取Excel文件中的第一个Sheet页
        XSSFSheet sheet = excel.getSheetAt(0);

        //获取Sheet中最后一行的行号
        int lastRowNum = sheet.getLastRowNum();

        for (int i = 1; i <= lastRowNum ; i++) {
            //获得某一行
            XSSFRow row = sheet.getRow(i);
            //获得单元格对象
            String cellValue1 = row.getCell(1).getStringCellValue();
            String cellValue2 = row.getCell(2).getStringCellValue();
            System.out.println(cellValue1 + " " + cellValue2);
        }

        //关闭资源
        in.close();
        excel.close();
    }

    public static void main(String[] args) throws Exception {
        write();
        //read();
    }
}

结果


在这里插入图片描述
在这里插入图片描述
进阶:
https://www.bilibili.com/video/BV1TP411v7v6?spm_id_from=333.788.videopod.episodes&vd_source=30e0dbbcdf92f994da40acdfcd84cd5b&p=166
最后能做出这个样子
在这里插入图片描述

### Apache POIEasyExcel 的特点及适用场景对比 #### 性能方面 Apache POI 是一款功能强大的 Java 库,用于读取和写入 Microsoft Office 文件格式。然而,在处理大型 Excel 文件时,它的内存消耗较高,容易引发内存溢出问题[^1]。相比之下,EasyExcel 针对这一缺陷进行了改进,通过对 07 版本 Excel 解析逻辑的重构,大幅降低了内存占用,从而能够更稳定地支持大数据量操作。 此外,EasyExcel 提供了极速模式,进一步提升了文件解析的速度,使其成为处理超大规模数据的理想选择[^2]。 #### 易用性方面 Apache POI 虽然功能全面,但由于其实现机制较为复杂,开发者需要编写较多代码来实现基本的功能需求。而 EasyExcel 则简化了许多常见的操作流程,例如批量导入导出、模板填充等功能都可以通过简单的配置快速完成。这种设计极大地减少了开发时间并提高了项目的可维护性。 #### 使用场景 - **Apache POI**: 如果项目中涉及复杂的文档编辑或者兼容多种版本的 Excel 文档,则可以选择 Apache POI。尽管其性能可能不如 EasyExcel,但在灵活性和支持范围上具有优势。 - **EasyExcel**: 对于专注于高性能的大规模数据处理任务(如日志记录、报表生成等),以及希望减少编码工作量的应用场合,推荐使用 EasyExcel。特别是当业务场景主要围绕 HSSFWorkbook 或 XSSFWorkbook 格式的现代 Excel 文件展开时,该工具尤为合适。 ```java // Example of using EasyExcel to read a file. import com.alibaba.excel.EasyExcel; public class Demo { public static void main(String[] args) { String fileName = "example.xlsx"; EasyExcel.read(fileName, DemoData.class, new PageReadListener<DemoData>(dataList -> { for (DemoData data : dataList) { System.out.println(data); } })).sheet().doRead(); } } ``` 上述代码展示了如何利用 EasyExcel 实现一个简单的 Excel 数据读取过程,体现了其简洁性和高效性的特性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值