EXCEL 工具

如何在 Java 中讀取 Excel 檔案(教程)

發佈 2023年2月23日
分享:

什麼是 Excel?

Microsoft Excel 工作簿是一款基於電子表格的軟體,可讓使用者以高效的方式組織和存儲數據。它以表格式形式存儲和組織數據,即使用行和列。Excel 電子表格中的儲存格是存放數據的小方框,並且可以使用不同的樣式、格式和公式進行操作。

如何在 Java 中讀取 Excel 文件?

閱讀 Excel 文件有時會很複雜。在 Java 中讀取 Excel 文件也與在 Java 中讀取 Word 文件有些不同,因為 Excel 有單元格。JDK 沒有提供直接的 API 來讀取或寫入 Microsoft Excel 文件。我們必須依賴第三方庫 Apache POI

Apache POI 庫

POI 代表“Poor Obfuscation Implementation” (簡單混淆實現)。Apache POI 是一個開源的 Java 庫,設計用於讀取和寫入 Microsoft 文檔。它提供了一種創建和操作基於 Microsoft Office 的各種文件格式的方法。使用 Apache POI,應該能夠對一系列 Microsoft Office 文件格式進行創建、修改和顯示/讀取操作。

下載並安裝 Apache POI 庫

首先,我們將下載最新版本的 POI JAR。導航至 http://poi.apache.org/download.html 下載最新的 ZIP 檔案,內含 Java API,用於在 Java 中讀取 Excel 檔案。

如何在 Java 中读取 Excel 文件,圖1:下載二進制分發文件

下載 Apache POI JAR 文件

當您下載ZIP檔案後,您需要將其解壓縮,並將以下JAR文件添加到您的專案的classpath中。這在下面的從Excel文件中讀取中有解釋。

如何在 Java 中讀取 Excel 文件,圖2:JAR 文件

將 Apache POI Jar 文件添加到 Java 類路徑

注意:請同時複製來自lib和ooxml-lib的文件與其他文件。

POI中的類和介面

以下是支持XLS和XLSX文件格式的可使用類:

How to Read Excel Files in Java, Figure 3: Apache POI 類別

Apache POI 類別

以下是列出在 Java 中使用 POI 讀取 XLSXLSX 文件的不同 Java 介面和類別:

Workbook 介面由 HSSFWorkbookXSSFWorkbook 類實現。

  • HSSFWorkbook:這是 XLS 文件的類別表示。
  • XSSFWorkbook:這是 XLSX 文件的類別表示。

Sheet 介面由 HSSFSheetXSSFSheet 類實現。

  • HSSFSheet:這是表示 XLS 文件中工作表的類別。
  • XSSFSheet:這是表示 XLSX 文件中工作表的類別。

Row 介面由 HSSFRowXSSFRow 類實現。

  • HSSFRow:這是表示 XLS 文件工作表中的列的類別。
  • XSSFRow:這是表示 XLSX 文件工作表中的列的類別。

Cell 介面由 HSSFCellXSSFCell 類實現。

  • HSSFCell:這是表示 XLS 文件中的列中的單元格的類別。
  • XSSFCell:這是表示 XLSX 文件中的列中的單元格的類別。

從 Excel 文件讀取

作為範例,我們將在 Java 中讀取以下 Excel 文件:

如何讀取 Java 中的 Excel 文件,圖 4:要讀取的 Excel 文件

將會被讀取的 Excel 文件

使用 Java 讀取 Excel 文件的步驟

  1. 使用任何 Java IDE 創建一個 Java 專案。我們將在本項目中使用 Netbeans。

  2. 接下來,在項目中創建一個 lib 資料夾。

  3. 然後將下載的 JAR 檔案添加到上一步創建的 lib 資料夾中。

  4. 設定 Class-Path:右鍵點擊項目資料夾 > Build Path > Add External JARs files > 選擇所有上述 JAR 檔案 > Apply and close。

  5. 現在,讓我們創建一個名為 ReadExcelFileDemo 的類文件。

  6. 創建一個名為 "studentdata.xls" 的 Excel 文件,並在其中寫入上述數據或任何數據。

以下是用 Java 讀取 Excel 文件的代碼範例:

import java.io.File;  
import java.io.FileInputStream;  
import java.io.IOException;  
import org.apache.poi.hssf.usermodel.HSSFSheet;  
import org.apache.poi.hssf.usermodel.HSSFWorkbook;  
import org.apache.poi.ss.usermodel.Cell;  
import org.apache.poi.ss.usermodel.FormulaEvaluator;  
import org.apache.poi.ss.usermodel.Row;  

public class ReadExcelFileDemo  {  
    public static void main(String args []) throws IOException  {  
        //obtaining input bytes from a file  
        FileInputStream fis=new FileInputStream(new File("C:\\demo\\studentdata.xls"));  
        //creating workbook instance that refers to .xls file  
        HSSFWorkbook wb=new HSSFWorkbook(fis);   
        //creating a Sheet object to retrieve the object  
        HSSFSheet sheet=wb.getSheetAt(0);  
        //evaluating cell type   
        FormulaEvaluator formulaEvaluator=wb.getCreationHelper().createFormulaEvaluator();  
        for(Row row: sheet) {  
            for(Cell cell: row) {
                switch(formulaEvaluator.evaluateInCell(cell).getCellType()) {  
                    case Cell.CELL_TYPE_NUMERIC: //field that represents numeric cell type  
                        //getting the value of the cell as a number  
                        System.out.print(cell.getNumericCellValue()+ "\t\t");   
                        break;  
                    case Cell.CELL_TYPE_STRING: //field that represents string cell type  
                        //getting the value of the cell as a string  
                        System.out.print(cell.getStringCellValue()+ "\t\t");  
                        break;
                }
            }
            System.out.println();  
        }
    }
}
JAVA

輸出:

IdNames
1Zeeshan
2Shoaib
3Umar
4Rizwan
5Ahsan

步骤与读取 xlsx 文件相同,除了以下两个主要区别:

  • 首先,将文件格式更改为 .xlsx。可以使用相同的文件 “studentdata”,但带有 .xlsx 扩展名。
  • 其次,我们导入 Java Apache POI 的方式有所不同。代码如下:
import java.io.File;  
import java.io.FileInputStream;  
import java.util.Iterator;  
import org.apache.poi.ss.usermodel.Cell;  
import org.apache.poi.ss.usermodel.Row;  
import org.apache.poi.xssf.usermodel.XSSFSheet;  
import org.apache.poi.xssf.usermodel.XSSFWorkbook;  

public class XLSXReaderExample  {

    public static void main(String [] args) {  
        try {  
            File file = new File("C:\\demo\\studentdata.xlsx");  
            FileInputStream fis = new FileInputStream(file);  
            //creating Workbook instance that refers to .xlsx file  
            XSSFWorkbook wb = new XSSFWorkbook(fis);   
            XSSFSheet sheet = wb.getSheetAt(0); 
            Iterator<Row> itr = sheet.iterator();
            while (itr.hasNext()) {  
                Row row = itr.next();  
                Iterator<Cell> cellIterator = row.cellIterator();   //iterating over each column  
                while (cellIterator.hasNext()) {  
                    Cell cell = cellIterator.next();  
                    switch (cell.getCellType()) {  
                        case Cell.CELL_TYPE_NUMERIC: //field that represents numeric cell type  
                            //getting the value of the cell as a number  
                            System.out.print(cell.getNumericCellValue() + "\t\t");   
                            break;
                        case Cell.CELL_TYPE_STRING: //field that represents string cell type  
                            //getting the value of the cell as a string  
                            System.out.print(cell.getStringCellValue() + "\t\t");  
                            break;
                    }
                }
                System.out.println("");  
            }  
        } catch(Exception e) {  
            e.printStackTrace();  
        }
    }
}
JAVA

輸出:

IdNames
1Zeeshan
2Shoaib
3Umar
4Rizwan
5Ahsan

The IronXL C# Library

IronXL C# 程式庫

IronXL 是一個獨立的.NET程式庫,可輕鬆使用C#讀取和編輯Microsoft Excel文件。它既不需要安裝Microsoft Excel,也不依賴Interop。

使用IronXL,開發人員只需編寫幾行代碼,即可輕鬆執行所有與Excel相關的計算並具有快速性能。這包括添加兩個儲存格,計算整列的總和,將整列添加到Excel表格,將整行添加到Excel表格,單列和多列的總和計算,或通過IronXL簡化的許多其他任務。 有用的功能IronXL完全支援.NET Framework、.NET Core、Mobile、Xamarin、Azure Linux和MacOS。

IronXL 功能集

  • 加載、讀取和編輯來自 XLS/XLSX/CSV/TSV 的資料。
  • 儲存和匯出為 XLS/XLSX/CSV/TSV/JSON。
  • System.Data 物件 — 為 System.Data.DataSetSystem.Data.DataTable 物件使用 Excel 試算表。
  • 公式 — 處理 Excel 公式。
  • 範圍 —["A1:B10"] 語法易於使用。
  • 排序 — 排列行、列和範圍。
  • 樣式 — 視覺樣式、字體和字體大小、背景圖案、邊框、對齊和數字格式。

以下是一個使用 C# 和 IronXL 讀取 Excel 檔案的程式碼範例:

using IronXL;
using System.Linq;

//Supported spreadsheet formats for reading include: XLSX, XLS, CSV and TSV
WorkBook workbook = WorkBook.Load("test.xlsx");
WorkSheet sheet = workbook.WorkSheets.First();

//Select cells easily in Excel notation and return the calculated value
int cellValue = sheet ["A2"].IntValue;

// Read from Ranges of cells elegantly.
foreach (var cell in sheet ["A2:A10"]) {
    Console.WriteLine("Cell {0} has value '{1}'", cell.AddressString, cell.Text);
}
using IronXL;
using System.Linq;

//Supported spreadsheet formats for reading include: XLSX, XLS, CSV and TSV
WorkBook workbook = WorkBook.Load("test.xlsx");
WorkSheet sheet = workbook.WorkSheets.First();

//Select cells easily in Excel notation and return the calculated value
int cellValue = sheet ["A2"].IntValue;

// Read from Ranges of cells elegantly.
foreach (var cell in sheet ["A2:A10"]) {
    Console.WriteLine("Cell {0} has value '{1}'", cell.AddressString, cell.Text);
}
Imports IronXL
Imports System.Linq

'Supported spreadsheet formats for reading include: XLSX, XLS, CSV and TSV
Private workbook As WorkBook = WorkBook.Load("test.xlsx")
Private sheet As WorkSheet = workbook.WorkSheets.First()

'Select cells easily in Excel notation and return the calculated value
Private cellValue As Integer = sheet ("A2").IntValue

' Read from Ranges of cells elegantly.
For Each cell In sheet ("A2:A10")
	Console.WriteLine("Cell {0} has value '{1}'", cell.AddressString, cell.Text)
Next cell
VB   C#

使用 IronXL 使開發人員的工作變得更加簡單。其簡單易用的代碼在處理 Excel 文件時使軟體更不容易出現錯誤。

下載 IronXL 並在今天將其用於您的專案。

< 上一頁
.NET 正則表達式測試工具(它如何為開發者工作)
下一個 >
如何在 Excel 中切換欄位

準備開始了嗎? 版本: 2024.9 剛剛發布

免費 NuGet 下載 總下載次數: 1,004,037 查看許可證 >