Java解析Excel

Excel作為一種常用的數據處理工具,在開發過程中也扮演着重要的角色。Java作為一種廣泛使用的編程語言,也提供了許多解析Excel的庫。本文將從多個方面對Java解析Excel做詳細的闡述。

一、使用POI庫解析Excel

Apache POI是一種開源的Java API,用於處理微軟的DOC、XLS、PPT等文件。許多Java開發人員使用Apache POI來解析和創建Excel文件。POI庫提供了兩個不同的API來解析Excel文件。分別是:HSSFXSSF

1、HSSF

HSSF是POI庫的一個重要部分,用於解析Excel 97-2003文件格式的文件,也稱作「xls」格式。以下是一個基本的HSSF讀取示例:

FileInputStream inputStream = new FileInputStream(new File("C:\\temp\\test.xls"));
HSSFWorkbook workbook = new HSSFWorkbook(inputStream);
HSSFSheet sheet = workbook.getSheetAt(0);
Iterator<Row> iterator = sheet.iterator();
while (iterator.hasNext()) {
    Row currentRow = iterator.next();
    Iterator<Cell> cellIterator = currentRow.iterator();
    while (cellIterator.hasNext()) {
        Cell currentCell = cellIterator.next();
        if (currentCell.getCellType() == CellType.STRING) {
            System.out.print(currentCell.getStringCellValue() + "--");
        } else if (currentCell.getCellType() == CellType.NUMERIC) {
            System.out.print(currentCell.getNumericCellValue() + "--");
        }
    }
    System.out.println();
}
workbook.close();
inputStream.close();

2、XSSF

XSSF是POI庫的另一個部分,用於解析Excel 2007或更高版本的文件格式,也稱作「xlsx」格式。以下是一個基本的XSSF讀取示例:

FileInputStream inputStream = new FileInputStream(new File("C:\\temp\\test.xlsx"));
XSSFWorkbook workbook = new XSSFWorkbook(inputStream);
XSSFSheet sheet = workbook.getSheetAt(0);
Iterator<Row> iterator = sheet.iterator();
while (iterator.hasNext()) {
    Row currentRow = iterator.next();
    Iterator<Cell> cellIterator = currentRow.iterator();
    while (cellIterator.hasNext()) {
        Cell currentCell = cellIterator.next();
        if (currentCell.getCellType() == CellType.STRING) {
            System.out.print(currentCell.getStringCellValue() + "--");
        } else if (currentCell.getCellType() == CellType.NUMERIC) {
            System.out.print(currentCell.getNumericCellValue() + "--");
        }
    }
    System.out.println();
}
workbook.close();
inputStream.close();

二、使用JExcelApi庫解析Excel

JExcelApi是一種流行的Java API,用於處理Excel文件格式。它與POI庫類似,但用法略有不同。

1、讀取Excel文件

以下是一個基本的JExcelApi讀取Excel文件的示例:

WorkbookSettings ws = new WorkbookSettings();
ws.setLocale(new Locale("en", "EN"));
Workbook workbook = Workbook.getWorkbook(new File("C:\\temp\\test.xls"), ws);
Sheet sheet = workbook.getSheet(0);
for (int i = 0; i < sheet.getRows(); i++) {
    for (int j = 0; j < sheet.getColumns(); j++) {
        Cell cell = sheet.getCell(j, i);
        System.out.print(cell.getContents() + "--");
    }
    System.out.println();
}
workbook.close();

2、寫入Excel文件

以下是一個基本的JExcelApi寫入Excel文件的示例:

WritableWorkbook workbook = Workbook.createWorkbook(new File("C:\\temp\\output.xls"));
WritableSheet sheet = workbook.createSheet("Sheet1", 0);
Label label = new Label(0, 0, "Label test");
sheet.addCell(label);
Number number = new Number(1, 0, 123.45);
sheet.addCell(number);
workbook.write();
workbook.close();

三、使用EasyExcel庫解析Excel

EasyExcel是一種比較新的Java庫,其目的是讓Java處理Excel具有更高的可讀性、更好的性能和更好的易用性。EasyExcel支持讀取、寫入、處理大型Excel文件等功能,具有良好的兼容性和可擴展性。

1、讀取Excel文件

EasyExcel讀取Excel文件的示例如下:

String fileName = "C:\\temp\\test.xlsx";
EasyExcel.read(fileName, new AnalysisEventListener<DemoData>() {
    @Override
    public void invoke(DemoData demoData, AnalysisContext analysisContext) {
        System.out.println(demoData);
    }
    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {}
}).sheet().doRead();

2、寫入Excel文件

EasyExcel寫入Excel文件的示例如下:

String fileName = "C:\\temp\\output.xlsx";
EasyExcel.write(fileName, DemoData.class).sheet("Sheet1").doWrite(dataList);

其中,DemoData是用戶自定義的Java對象,表示Excel文件中的一個表格。

四、使用Java Spreadsheet API解析Excel

Java Spreadsheet API是一種很新的Java庫,用於處理Microsoft Excel文件格式。它提供了一種API,使Java開發人員可以輕鬆地讀取和寫入Excel文件。

1、讀取Excel文件

以下是一個Java Spreadsheet API讀取Excel文件的示例:

SpreadsheetInfo.setLicense("FREE-LIMITED-KEY");
FileInputStream inputStream = new FileInputStream(new File("C:\\temp\\test.xlsx"));
SpreadsheetDocument document = SpreadsheetDocument.load(inputStream);
Worksheet sheet = document.getWorksheets().get(0);
for (int i = 0; i < sheet.getCells().getRows().getCount(); i++) {
    for (int j = 0; j < sheet.getCells().getColumns().getCount(); j++) {
        Cell cell = sheet.getCells().get(i, j);
        System.out.print(cell.getValue() + "--");
    }
    System.out.println();
}
document.close();
inputStream.close();

2、寫入Excel文件

以下是一個Java Spreadsheet API寫入Excel文件的示例:

SpreadsheetInfo.setLicense("FREE-LIMITED-KEY");
SpreadsheetDocument document = new SpreadsheetDocument();
Worksheet sheet = document.getWorksheets().add("Sheet1");
sheet.getCells().get("A1").setValue("Label test");
sheet.getCells().get("B1").setValue(123.45);
document.save("C:\\temp\\output.xlsx");
document.close();

五、使用JXL解析Excel

JXL是另一種廣泛使用的Java庫,用於處理Excel文件格式。雖然JXL比POI和JExcelApi都要早,但它仍然被許多Java開發人員廣泛使用。

1、讀取Excel文件

以下是一個基本的JXL讀取Excel文件的示例:

Workbook workbook = Workbook.getWorkbook(new File("C:\\temp\\test.xls"));
Sheet sheet = workbook.getSheet(0);
for (int i = 0; i < sheet.getRows(); i++) {
    for (int j = 0; j < sheet.getColumns(); j++) {
        Cell cell = sheet.getCell(j, i);
        System.out.print(cell.getContents() + "--");
    }
    System.out.println();
}
workbook.close();

2、寫入Excel文件

以下是一個基本的JXL寫入Excel文件的示例:

WritableWorkbook workbook = Workbook.createWorkbook(new File("C:\\temp\\output.xls"));
WritableSheet sheet = workbook.createSheet("Sheet1", 0);
Label label = new Label(0, 0, "Label test");
sheet.addCell(label);
Number number = new Number(1, 0, 123.45);
sheet.addCell(number);
workbook.write();
workbook.close();

六、小結

本文詳細介紹了Java解析Excel的幾種流行的庫,包括POI、JExcelApi、EasyExcel、Java Spreadsheet API和JXL。每個庫都提供了讀取和/或寫入Excel文件的功能,並且具有各自的優點和不同的用法。開發人員可以根據自己的具體需求選擇一個或多個庫。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/185404.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-11-26 12:19
下一篇 2024-11-26 12:19

相關推薦

  • Java JsonPath 效率優化指南

    本篇文章將深入探討Java JsonPath的效率問題,並提供一些優化方案。 一、JsonPath 簡介 JsonPath是一個可用於從JSON數據中獲取信息的庫。它提供了一種DS…

    編程 2025-04-29
  • java client.getacsresponse 編譯報錯解決方法

    java client.getacsresponse 編譯報錯是Java編程過程中常見的錯誤,常見的原因是代碼的語法錯誤、類庫依賴問題和編譯環境的配置問題。下面將從多個方面進行分析…

    編程 2025-04-29
  • Java Bean加載過程

    Java Bean加載過程涉及到類加載器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean加載的過程。 一、類加載器 類加載器是Java虛擬機…

    編程 2025-04-29
  • Java騰訊雲音視頻對接

    本文旨在從多個方面詳細闡述Java騰訊雲音視頻對接,提供完整的代碼示例。 一、騰訊雲音視頻介紹 騰訊雲音視頻服務(Cloud Tencent Real-Time Communica…

    編程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介紹

    本文將詳細介紹Java Milvus SearchParam withoutFields的相關知識和用法。 一、什麼是Java Milvus SearchParam without…

    編程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java語言中的一個版本,於2014年3月18日發佈。本文將從多個方面對Java 8中某一周的周一進行詳細的闡述。 一、數組處理 Java 8新特性之一是Stream…

    編程 2025-04-29
  • Java判斷字符串是否存在多個

    本文將從以下幾個方面詳細闡述如何使用Java判斷一個字符串中是否存在多個指定字符: 一、字符串遍歷 字符串是Java編程中非常重要的一種數據類型。要判斷字符串中是否存在多個指定字符…

    編程 2025-04-29
  • VSCode為什麼無法運行Java

    解答:VSCode無法運行Java是因為默認情況下,VSCode並沒有集成Java運行環境,需要手動添加Java運行環境或安裝相關插件才能實現Java代碼的編寫、調試和運行。 一、…

    編程 2025-04-29
  • Java任務下發回滾系統的設計與實現

    本文將介紹一個Java任務下發回滾系統的設計與實現。該系統可以用於執行複雜的任務,包括可回滾的任務,及時恢復任務失敗前的狀態。系統使用Java語言進行開發,可以支持多種類型的任務。…

    編程 2025-04-29
  • Java 8 Group By 會影響排序嗎?

    是的,Java 8中的Group By會對排序產生影響。本文將從多個方面探討Group By對排序的影響。 一、Group By的概述 Group By是SQL中的一種常見操作,它…

    編程 2025-04-29

發表回復

登錄後才能評論