iT邦幫忙

2024 iThome 鐵人賽

DAY 21
0

Apache POI是一個基於Java的免費開源函式庫,相較於JasperReports只能匯出,Apache POI可以讓我們讀取、匯出Excel、Word、Power Point等Microsoft Office的各種文件。
由於我個人經驗是處理Excel而已,因此會以Excel的相關API與類別的介紹為主。

Maven

<!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>5.2.3</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
<dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi-ooxml</artifactId>
    <version>5.2.3</version>
</dependency>

處理文件的各種實現類別

Office文件分為2003以及之前的版本與2007以及之後的版本,在2007以及之後的版本採用了Office Open XML (OOXML)的檔案格式,提升資料儲存與傳輸的效率,而依據要處理的Office文件的不同,Apache POI提供了許多相應的實現類別:

Excel

  • HSSFWorkbook:操作Excel 2003和以前的版本(.xls)
  • XSSFWorkbook:操作Excel 2007和以後的版本(.xlsx)
  • SXSSFWorkbook:用於處理龐大資料Excel的匯出(.xlsx)

Word

  • HWPFDocument:操作Word 2003和以前的版本(.doc)
  • XWPFDocument:操作Word 2007和以後的版本(.docx)

Power Point

  • HSLFSlide:操作Power Point 2003和以前的版本(.ppt)
  • XSLFSlide:操作Power Point 2007和以後的版本(.pptx)

其他還有Outlook、Publisher等等。
JasperReports也有區分版本,例如匯出Excel有JRXlsExporter和JRXlsxExporter兩種,匯出時都要注意副檔名用錯的話會打不開。

Excel Workbook的比較

Excel的處理由Workbook介面作為工作簿,常用HSSFWorkbook、XSSFWorkbook、SXSSFWorkbook三種實現類別來處理Excel。

HSSFWorkbook

用於Excel 2003和以前的版本,格式為.xls,匯出的列數最多只有65535列,資料量少,以現今的電腦而言比較不會發生OOM (Out of Memory)。

XSSFWorkbook

Excel 2007和以後的版本,格式為.xlsx,匯出的列數最多1048576列,但因為使用XSSFWorkbook建立的物件是存在記憶體中的,如果一次要處理這麼多資料是有可能發生OOM。

SXSSFWorkbook

SXSSFWorkbook就是為了 解決XSSFWorkbook大資料量的OOM情況 所誕生的,以流式處理(Streaming)的方式來逐步處理一部分資料,而不是一次性將所有資料載入記憶體中。我們可以自己設定記憶體當下要處理多少列數,將超過限制的列數由記憶體中的資料持久化暫存到硬碟,用這種逐步寫入的方式匯出大資料量的Excel,增加了大量資料寫入的效率,但不適合讀取、刪改文件,也無法做圖表,可以視為一種專門匯出大量資料的XSSFWorkbook。

他們的差異我大致整理為下表:

Workbook HSSFWorkbook XSSFWorkbook SXSSFWorkbook
檔案格式 .xls .xlsx .xlsx
最大列數 約6.5萬 約104萬 約104萬
處理大量資料效能 - 較低 較高
讀取 O O X
寫入(匯出) O O O
刪除工作簿、列、單元格 O O X
做圖表 O O X

後面的文章會實際使用XSSFWorkbook、SXSSFWorkbook匯出Excel,並實測一下大量資料的情況下,兩者匯出的效率到底差多少。


Reference


上一篇
JasperReports-一些小技巧
下一篇
Apache POI-寫入(匯出)Excel
系列文
Java工程師的報表入門與實作30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言