Java怎么利用poi读取Excel

发布时间:2022-07-28 10:16:32 作者:iii
来源:亿速云 阅读:135

Java怎么利用POI读取Excel

Apache POI(Poor Obfuscation Implementation)是一个开源的Java库,用于处理Microsoft Office文档,包括Excel、Word和PowerPoint等。POI库提供了丰富的API,使得Java开发者能够轻松地读取、写入和操作Excel文件。本文将详细介绍如何使用Apache POI库来读取Excel文件。

1. 环境准备

在开始之前,我们需要确保开发环境中已经配置了Apache POI库。可以通过Maven或手动下载JAR包的方式引入POI库。

1.1 使用Maven引入POI库

pom.xml文件中添加以下依赖:

<dependencies>
    <!-- Apache POI核心库 -->
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>5.2.3</version>
    </dependency>
    <!-- Apache POI OOXML库(用于处理.xlsx文件) -->
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>5.2.3</version>
    </dependency>
    <!-- Apache POI OOXML Schemas库 -->
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml-schemas</artifactId>
        <version>4.1.2</version>
    </dependency>
    <!-- XMLBeans库 -->
    <dependency>
        <groupId>org.apache.xmlbeans</groupId>
        <artifactId>xmlbeans</artifactId>
        <version>5.1.1</version>
    </dependency>
</dependencies>

1.2 手动下载JAR包

如果你不使用Maven,可以手动下载以下JAR包并将其添加到项目的类路径中:

2. 读取Excel文件的基本步骤

使用POI读取Excel文件的基本步骤如下:

  1. 创建一个Workbook对象,表示整个Excel文件。
  2. 获取指定的Sheet(工作表)。
  3. 遍历Sheet中的每一行(Row)。
  4. 遍历每一行中的每一个单元格(Cell)。
  5. 读取单元格中的数据。

2.1 读取.xls文件

.xls文件是Excel 97-2003格式的文件,使用HSSFWorkbook类来处理。

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;

import java.io.FileInputStream;
import java.io.IOException;

public class ReadExcelXLS {
    public static void main(String[] args) {
        try (FileInputStream file = new FileInputStream("example.xls")) {
            Workbook workbook = new HSSFWorkbook(file);
            Sheet sheet = workbook.getSheetAt(0); // 获取第一个工作表

            for (Row row : sheet) {
                for (Cell cell : row) {
                    switch (cell.getCellType()) {
                        case STRING:
                            System.out.print(cell.getStringCellValue() + "\t");
                            break;
                        case NUMERIC:
                            System.out.print(cell.getNumericCellValue() + "\t");
                            break;
                        case BOOLEAN:
                            System.out.print(cell.getBooleanCellValue() + "\t");
                            break;
                        case FORMULA:
                            System.out.print(cell.getCellFormula() + "\t");
                            break;
                        default:
                            System.out.print("UNKNOWN\t");
                    }
                }
                System.out.println();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

2.2 读取.xlsx文件

.xlsx文件是Excel 2007及以上版本的文件格式,使用XSSFWorkbook类来处理。

import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.ss.usermodel.*;

import java.io.FileInputStream;
import java.io.IOException;

public class ReadExcelXLSX {
    public static void main(String[] args) {
        try (FileInputStream file = new FileInputStream("example.xlsx")) {
            Workbook workbook = new XSSFWorkbook(file);
            Sheet sheet = workbook.getSheetAt(0); // 获取第一个工作表

            for (Row row : sheet) {
                for (Cell cell : row) {
                    switch (cell.getCellType()) {
                        case STRING:
                            System.out.print(cell.getStringCellValue() + "\t");
                            break;
                        case NUMERIC:
                            System.out.print(cell.getNumericCellValue() + "\t");
                            break;
                        case BOOLEAN:
                            System.out.print(cell.getBooleanCellValue() + "\t");
                            break;
                        case FORMULA:
                            System.out.print(cell.getCellFormula() + "\t");
                            break;
                        default:
                            System.out.print("UNKNOWN\t");
                    }
                }
                System.out.println();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

3. 处理不同类型的数据

在读取Excel文件时,单元格中的数据可能有多种类型,如字符串、数字、布尔值、公式等。我们需要根据单元格的类型来正确处理数据。

3.1 处理字符串数据

字符串数据是最常见的数据类型,可以直接使用getStringCellValue()方法获取。

case STRING:
    System.out.print(cell.getStringCellValue() + "\t");
    break;

3.2 处理数字数据

数字数据可以是整数或浮点数,使用getNumericCellValue()方法获取。

case NUMERIC:
    if (DateUtil.isCellDateFormatted(cell)) {
        System.out.print(cell.getDateCellValue() + "\t");
    } else {
        System.out.print(cell.getNumericCellValue() + "\t");
    }
    break;

3.3 处理布尔数据

布尔数据只有truefalse两种值,使用getBooleanCellValue()方法获取。

case BOOLEAN:
    System.out.print(cell.getBooleanCellValue() + "\t");
    break;

3.4 处理公式数据

公式数据表示单元格中包含的公式,使用getCellFormula()方法获取公式字符串。

case FORMULA:
    System.out.print(cell.getCellFormula() + "\t");
    break;

3.5 处理空单元格

空单元格没有数据,可以使用CellType.BLANK来判断。

case BLANK:
    System.out.print("BLANK\t");
    break;

4. 处理日期数据

Excel中的日期数据通常以数字形式存储,POI提供了DateUtil工具类来处理日期数据。

case NUMERIC:
    if (DateUtil.isCellDateFormatted(cell)) {
        System.out.print(cell.getDateCellValue() + "\t");
    } else {
        System.out.print(cell.getNumericCellValue() + "\t");
    }
    break;

5. 处理大文件

对于非常大的Excel文件,使用XSSFWorkbook可能会导致内存不足的问题。POI提供了SXSSFWorkbook类来处理大文件,它采用流式处理方式,只将部分数据加载到内存中。

import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.apache.poi.ss.usermodel.*;

import java.io.FileInputStream;
import java.io.IOException;

public class ReadLargeExcel {
    public static void main(String[] args) {
        try (FileInputStream file = new FileInputStream("large_example.xlsx")) {
            Workbook workbook = new SXSSFWorkbook(new XSSFWorkbook(file));
            Sheet sheet = workbook.getSheetAt(0); // 获取第一个工作表

            for (Row row : sheet) {
                for (Cell cell : row) {
                    switch (cell.getCellType()) {
                        case STRING:
                            System.out.print(cell.getStringCellValue() + "\t");
                            break;
                        case NUMERIC:
                            System.out.print(cell.getNumericCellValue() + "\t");
                            break;
                        case BOOLEAN:
                            System.out.print(cell.getBooleanCellValue() + "\t");
                            break;
                        case FORMULA:
                            System.out.print(cell.getCellFormula() + "\t");
                            break;
                        default:
                            System.out.print("UNKNOWN\t");
                    }
                }
                System.out.println();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

6. 总结

通过Apache POI库,Java开发者可以轻松地读取Excel文件中的数据。本文介绍了如何使用POI库读取.xls.xlsx文件,并处理不同类型的数据。对于大文件,可以使用SXSSFWorkbook来避免内存不足的问题。希望本文能帮助你更好地理解和使用Apache POI库来处理Excel文件。

推荐阅读:
  1. POI原生导入读取EXCEL方法
  2. Java POI读取excel中数值精度损失怎么办

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

java poi excel

上一篇:vue中的slot-scope及scope.row怎么使用

下一篇:android原生如何实现多线程断点续传功能

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》