简介

Apache POI 是一个处理Miscrosoft Office各种文件格式的开源项目,主要任务是创建和维护Java API,以基于Office Open XML标准(OOXML)和Microsoft的OLE 2复合文档格式(OLE2)处理各种文件格式, 该API的组件列表如下:

  • POIFS - 该组件是所有其他POI元素的基本因素。 它用于显式读取不同的文件。
  • HSSF - 用于读取和写入MS-Excel文件的xls格式。
  • XSSF - 用于MS-Excel的xlsx文件格式。 常用,
  • SXSSF - 用于比较大的xlsx文件格式。
  • HWPF - 用于读写MS-Word的doc扩展文件。
  • XWPF - 用于读写MS-Word的docx扩展文件。
  • HSLF - 用于阅读,创建和编辑PowerPoint演示文稿。
  • HDGF - 它包含MS-Visio二进制文件的类和方法。
  • HPBF - 用于读写MS-Publisher文件。

excel有两个常用后缀 ,一个是较老的版本 后缀是 xls ,一个是xlsx 2007及以后版本生成的文件格式 xls和xlsx的区别

简单来说就是,我们可以使用 POI 在 Java 中对Miscrosoft Office各种文件进行读写操作。一般情况下,POI 都是用于操作 Excel 文件。
在这里插入图片描述


快速入门:

Apache POI既可以将数据写入Excel文件,也可以读取Excel文件中的数据,接下来分别进行实现。

导入依赖:

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
</dependency>
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
</dependency>
1 将数据写入Excel表

使用的大致思路其实也和我们手动创建Excel一样

创建一个Excel文件 ======>> 创建一个Sheet页 ======>> 创建行 ======>> 创建行中的每一列

注意都是从0开始

    @Test
    public void testExcel() throws Exception {
//       创建一个Excel文件
        XSSFWorkbook sheets = new XSSFWorkbook();
//       创建一个Sheet页
        XSSFSheet sheet = sheets.createSheet("用户信息");
//       通过Sheet一行, 创建行   
        XSSFRow row1 = sheet.createRow(0);
//       创建行中的每一列
        row1.createCell(1).setCellValue("姓名");
        row1.createCell(2).setCellValue("城市");
//       创建第二行
        XSSFRow row2 = sheet.createRow(1);
        row2.createCell(1).setCellValue("张三");
        row2.createCell(2).setCellValue(23);

        XSSFRow row3 = sheet.createRow(2);
        row3.createCell(1).setCellValue("王五");
        row3.createCell(2).setCellValue(25);

        FileOutputStream outputStream = new FileOutputStream("E:\\MyProject\\testPOI.xlsx");

        sheets.write(outputStream);

//        关闭资源
        outputStream.close();
        sheets.close();
    }

此时就会在 E:\\MyProject\\ 生成一个 testPOI.xlsx 如下:

在这里插入图片描述

2 读取Excel表数据

下面就来读取刚才创建的文件
思路:
获取IO输入流 ======>> 得到当前文件对象 ======>> 获取Sheet对象 ======>> 得到行对象 ======>> 获取行中的单元格

    @Test
    public void testExcelRead() throws Exception {
//        获取IO输入流
        FileInputStream inputStream = new FileInputStream("E:\\MyProject\\testPOI.xlsx");
        // 通过构造器获取当前文件
        XSSFWorkbook xlsx = new XSSFWorkbook(inputStream);
//        通过名称获取指定的sheet页
        XSSFSheet userMessage = xlsx.getSheet("用户信息");
//        获取第一行
        XSSFRow row = userMessage.getRow(0);
//        获取第一行中的第二列,第三个的数据(第二个单元格和第三个单元格)
        XSSFCell oneTwo = row.getCell(1);   // 姓名
        XSSFCell oneThree = row.getCell(2); // 城市
        System.out.println(oneTwo + "  ---  " + oneThree);
//      获取第二行第三行的数据,  这里就模拟假如有多行的情况下
//       获取最后一行的行号
        int lastRowNum = userMessage.getLastRowNum();
        for (int i = 1; i <= lastRowNum; i++) {
            XSSFRow nowRow = userMessage.getRow(i);
            XSSFCell oneTwoMessage = nowRow.getCell(1);   // 姓名
            XSSFCell oneThreeMessage = nowRow.getCell(2); // 城市
            System.out.println(oneTwoMessage + "  ---  " + oneThreeMessage);
        }
//        关闭资源
        inputStream.close();
        xlsx.close();
    }

在这里插入图片描述

这里只是简单对POI中对Excel 中xlsx文件做了一个介绍, 其他的基本都大同小异没有太大的难度,对着APi 或文档即可直接使用,如果大家想看操作其他文件的实现, 可以参考下面官方文档和大佬的博客

官方文档(英文):

Overview (POI API Documentation) (51helpdoc.com)

推荐博客:
POI使用详解 - 空谷幽澜 - 博客园 (cnblogs.com)

POI中文API文档_poi中文api官方文档_weihubeats的博客-CSDN博客

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐