溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java怎么利用poi讀取Excel

發布時間:2022-07-28 10:16:32 來源:億速云 閱讀:146 作者:iii 欄目:開發技術

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包并將其添加到項目的類路徑中:

  • poi-5.2.3.jar
  • poi-ooxml-5.2.3.jar
  • poi-ooxml-schemas-4.1.2.jar
  • xmlbeans-5.1.1.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文件。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女