每日一課 | Apache POI –用Java讀寫Excel文件

2021-02-19 Java雲筆記

在本文中,我們將討論如何使用Apache POI讀寫Excel文件

1. Apache POI庫的基本定義

本節簡要介紹有關Excel讀寫期間使用的基本類。

HSSF在類名之前添加前綴,以指示與Microsoft Excel 2003文件相關的操作。

XSSF在類名之前添加前綴,以指示與Microsoft Excel 2007文件或更高版本相關的操作。

XSSFWorkbook和HSSFWorkbook是充當Excel工作簿的類

HSSFSheet和XSSFSheet是充當Excel工作表的類

Row定義一個Excel行

Cell定義參照行尋址的Excel單元格。 

2.下載Apache POI

使用Maven依賴關係可以輕鬆獲得Apache POI庫。

pom.xml 

<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>3.15</version>
  </dependency>

3. Apache POI庫–編寫簡單的Excel

以下代碼顯示了如何使用Apache POI庫編寫一個簡單的Excel文件。該代碼使用二維數據數組來保存數據。數據被寫入XSSFWorkbook對象。XSSFSheet是正在處理的工作表。代碼如下所示:

ApachePOIExcelWrite.java 

package com.mkyong;
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;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
public class ApachePOIExcelWrite {
    private static final String FILE_NAME = "/tmp/MyFirstExcel.xlsx";
    public static void main(String[] args) {
        XSSFWorkbook workbook = new XSSFWorkbook();
        XSSFSheet sheet = workbook.createSheet("Datatypes in Java");
        Object[][] datatypes = {
                {"Datatype", "Type", "Size(in bytes)"},
                {"int", "Primitive", 2},
                {"float", "Primitive", 4},
                {"double", "Primitive", 8},
                {"char", "Primitive", 1},
                {"String", "Non-Primitive", "No fixed size"}
        };
        int rowNum = 0;
        System.out.println("Creating excel");
        for (Object[] datatype : datatypes) {
            Row row = sheet.createRow(rowNum++);
            int colNum = 0;
            for (Object field : datatype) {
                Cell cell = row.createCell(colNum++);
                if (field instanceof String) {
                    cell.setCellValue((String) field);
                } else if (field instanceof Integer) {
                    cell.setCellValue((Integer) field);
                }
            }
        }
        try {
            FileOutputStream outputStream = new FileOutputStream(FILE_NAME);
            workbook.write(outputStream);
            workbook.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println("Done");
    }
}

執行上述代碼後,您將獲得以下excel作為輸出。

4. Apache POI庫–讀取Excel文件

以下代碼說明了如何使用Apache POI庫讀取Excel文件。函數getCellTypeEnum在版本3.15中已棄用,並且將從版本4.0 getCellType命名為getCellType 。

ApachePOIExcelRead.java 

package com.mkyong;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Iterator;
public class ApachePOIExcelRead {
    private static final String FILE_NAME = "/tmp/MyFirstExcel.xlsx";
    public static void main(String[] args) {
        try {
            FileInputStream excelFile = new FileInputStream(new File(FILE_NAME));
            Workbook workbook = new XSSFWorkbook(excelFile);
            Sheet datatypeSheet = workbook.getSheetAt(0);
            Iterator<Row> iterator = datatypeSheet.iterator();
            while (iterator.hasNext()) {
                Row currentRow = iterator.next();
                Iterator<Cell> cellIterator = currentRow.iterator();
                while (cellIterator.hasNext()) {
                    Cell currentCell = cellIterator.next();
                    //getCellTypeEnum shown as deprecated for version 3.15
                    //getCellTypeEnum ill be renamed to getCellType starting from version 4.0
                    if (currentCell.getCellTypeEnum() == CellType.STRING) {
                        System.out.print(currentCell.getStringCellValue() + "--");
                    } else if (currentCell.getCellTypeEnum() == CellType.NUMERIC) {
                        System.out.print(currentCell.getNumericCellValue() + "--");
                    }
                }
                System.out.println();
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

執行上面的代碼後,您將獲得以下輸出。 

Datatype--Type--Size(in bytes)--
int--Primitive--2.0--
float--Primitive--4.0--
double--Primitive--8.0--
char--Primitive--1.0--
String--Non-Primitive--No fixed size--

參考文獻:

有關棄用getCellTypeEnum的詳細信息

關於棄用的Apache POI參考

Apache POI Maven回購

Apache POI API文檔

翻譯自: https://mkyong.com/java/apache-poi-reading-and-writing-excel-file-in-java/

推薦閱讀--

相關焦點

  • 通過 Excel 來認識神器 Apache POI
    其下有兩個實現類:HSSFWorkbook : 有讀取.xls 格式和寫入Microsoft Excel文件的方法。它與微軟Office97-2003版本兼容XSSFWorkbook : 有讀寫Microsoft Excel和OpenOffice的XML文件的格式.xls或.xlsx的方法。
  • 來,通過 Excel 來認識神器——POI
    其下有兩個實現類:HSSFWorkbook : 有讀取.xls 格式和寫入Microsoft Excel文件的方法。它與微軟Office97-2003版本兼容XSSFWorkbook : 有讀寫Microsoft Excel和OpenOffice的XML文件的格式.xls或.xlsx的方法。
  • 計算機畢業設計中java實現在線預覽--poi實現word、excel、ppt轉html
    等)才行,可參考這篇文章http://blog.csdn.net/z69183787/article/details/17468039,寫的挺細的,實現原理就是:1.通過第三方工具openoffice,將word、excel、ppt、txt等文件轉換為pdf文件;2.通過swfTools將pdf文件轉換成swf格式的文件;3.通過FlexPaper文檔組件在頁面上進行展示。
  • 實戰:Java如何實現文件批量導入導出(兼容xls,xlsx)?
    3.2 對象本文主要介紹HSSF和XSSF兩種組件,簡單的講HSSF用來操作Office 2007版本前excel.xls文件,XSSF用來操作Office 2007版本後的excel.xlsx文件,注意二者的後綴是不一樣的。HSSF在org.apache.poi.hssf.usermodel包中。
  • 用Java玩轉Excel,竟然如此easy~
    2、POI核心類面向對象面向對象,既然如此,自然去找找一些能表示excel中內容的類。2.1 工作簿 Workbook創建或維護Excel工作簿的所有類的超接口,Workbook,屬於org.apache.poi.ss.usermodel包。
  • Java實現文件批量導入導出實踐(兼容xls,xlsx)
    2.3.2 對象本文主要介紹HSSF和XSSF兩種組件,簡單的講HSSF用來操作Office 2007版本前excel.xls文件,XSSF用來操作Office 2007版本後的excel.xlsx文件,注意二者的後綴是不一樣的。HSSF在org.apache.poi.hssf.usermodel包中。
  • Java:實現文件批量導入導出實踐(兼容xls,xlsx)
    2.3.2 對象本文主要介紹HSSF和XSSF兩種組件,簡單的講HSSF用來操作Office 2007版本前excel.xls文件,XSSF用來操作Office 2007版本後的excel.xlsx文件,注意二者的後綴是不一樣的。HSSF在org.apache.poi.hssf.usermodel包中。
  • Apache-Poi-XXE-Analysis漏洞分析
    apache poi 這個組件實際上在 java 應用中蠻常見的,這個組件主要用在 word 文檔或者 excel 文件導入的業務場景下使用。眾所周知,這些文檔實際上也是一個類似壓縮包一類的存在,所以今天就看看這個東西。
  • Java POI 操作 Excel
    什麼是POIApache POI 是用Java編寫的免費開源的跨平臺的 Java API
  • 計科前沿 || 用JAVA創建EXCEL表
    材料:Java編譯器,poi jar包 代碼:import java.io.FileOutputStream;import java.io.IOException; import org.apache.poi.hssf.usermodel.HSSFCell
  • POI讀寫超大數據量Excel,解決超過幾萬行而導致內存溢出的問題(附源碼)
    package org.poi;import org.apache.poi.openxml4j.opc.OPCPackage;import org.apache.poi.ss.usermodel.BuiltinFormats;import org.apache.poi.ss.usermodel.DataFormatter
  • 基於Apache POI解析Excel文件及內存使用分析
    關鍵詞:POI,Excel解析,內存溢出,用戶模式,事件模式已刊載在《電腦編程技巧與維護》十二月刊1 POI用戶模式解析較大Excel文件引起內存溢出某銀行企業網銀處理較大的Excel文件的異步處理程序在投產後多次出現內存溢出的情況,經系統工程師分析Java進程的heapdump文件,內存溢出與org/apache/poi/xssf/usermodel
  • 使用Java進行excel操作的幾種方法(上)
    package cn.tedu.excel.test;import org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.apache.poi.ss.usermodel.Cell;import org.apache.poi.ss.usermodel.Row;import org.apache.poi.ss.usermodel.Sheet
  • Android 使用 ApachePOI 組件讀寫 Word doc 和 docx 文件
    最近在項目中要生成Word的doc和docx文件,一番百度google之後,發現通過java語言實現的主流是Apache的POI組件。除了POI,這裡還有另一種實現,不過我沒有去研究,有興趣的同學可以研究研究。關於POI可以訪問Apache POI的官網獲取詳細的信息。進入主題!
  • java如何處理excel文件?(附項目源碼)
    下面我們以一個java實現的excel統計軟體為例,來具體學習(代碼其實可以更簡潔):運行結果:1.讀取文件即指定一個excel表格的文件名,此處單擊讀取,可打開電腦中已有的excel文件。2.sheet選擇可不填寫,默認值為1。3.篩選條件篩選條件和統計條件的不同之處在於,只有首先滿足了篩選條件的那些行,才會去進行統計條件的計算。
  • Hutool Java 工具類庫導出 Excel,超級簡單!
    以前用過POI、easyexcel等工具的導入導出功能,但總感覺太麻煩了,代碼特別多,感覺並不是很好用。今天給大家介紹一款新工具,java工具類庫Hutool。>cn.hutool</groupId>    <artifactId>hutool-all</artifactId>    <version>5.0.7</version></dependency><dependency>    <groupId>org.apache.poi
  • 優雅 | 今天很水的文章-Excel導入導出
    //這裡用了antd中的message組件 } catch (e) { // 這裡可以拋出文件類型錯誤不正確的相關提示 message.error('文件類型不正確!')
  • java 讀寫 wps xlsx 文件,判斷其中url圖片大小合併
    import java.io.ByteArrayOutputStream;import java.io.FileInputStream
  • 使用Java進行excel操作的幾種方法 (下)
    easyexcel是阿里巴巴開源的一款excel解析工具,底層邏輯也是基於apache poi進行二次開發的。不同的是,再讀寫數據的時候,採用sax模式一行一行解析,在並發量很大的情況下,依然能穩定運行!下面就一起來了解一下這款新起之秀!3.1 添加依賴包<!
  • Excel通用導出
    ;import lombok.extern.log4j.Log4j2;import org.apache.poi.ss.usermodel.*;import org.apache.poi.ss.util.CellRangeAddress;import org.apache.poi.xssf.streaming.SXSSFCell;import org.apache.poi.xssf.streaming.SXSSFRow;import org.apache.poi.xssf.streaming.SXSSFSheet;import org.apache.poi.xssf.streaming.SXSSFWorkbook