1. 程式人生 > >使用Apache POI API讀寫Excel

使用Apache POI API讀寫Excel

有時候我們需要從Excel檔案中讀取資料,或者我們為了商務或者財政的目的生成Excel格式的報表.Java沒有對操作Excel檔案提供內在的支援,所以我們需要尋找開源的APIs.當我開始尋找操作Excel的APIs時候,大部分人建議使用JExcel或者Apache POI.

在深入研究後,我發現由於以下主要原因Apache POI是正確的選擇.還有些關於高階特性的原因,但是我們不深入太多細節.
1)Apache基金的支援.
2)JExcel不支援xlsx格式而POI既支援xls格式又支援xlsx格式.
3)Apache POI是基於流的處理,因此更適合大檔案和要求更少的記憶體.
Apache POI對處理Excel檔案提供了強大的支援,並且能處理xls和xlsx格式的電子表格.


關於Apache POI一些重要的地方:
1)Apache POI包含適合Excel97-2007(.xls檔案)的HSSF實現.
2)Apache POI XSSF實現用來處理Excel2007檔案(.xlsx).
3)Apache POI HSSF和XSSF提供了讀/寫/修改Excel表格的機制.
4)Apache POI提供了XSSF的一個擴充套件SXSSF用來處理非常大的Excel工作單元.SXSSF API需要更少的記憶體,因此當處理非常大的電子表格同時堆記憶體又有限時,很合適使用.
5)有兩種模式可供選擇--事件模式和使用者模式.事件模式要求更少的記憶體,因為用tokens來讀取Excel並處理.使用者模式更加面向物件並且容易使用,因此在我們的示例中使用使用者   模式.
6)Apache POI為額外的Excel特性提供了強大支援,例如處理公式,建立單元格樣式--顏色,邊框,字型,頭部,腳部,資料驗證,影象,超連結等. 
 
Apache POI的Maven依賴

[java] view plaincopyprint?在CODE上檢視程式碼片派生到我的程式碼片
  1. <span style="font-size:14px;"><dependency>  
  2.     <groupId>org.apache.poi</groupId>  
  3.     <artifactId>poi</artifactId>  
  4.     <version>3.10-FINAL</version>  
  5. </dependency>  
  6. <dependency>  
  7.     <groupId>org.apache.poi</groupId>  
  8.     <artifactId>poi-ooxml</artifactId>  
  9.     <version>3.10-FINAL</version>  
  10. </dependency></span>  



Apache POI的當前版本是3.10-FINAL.如果你使用單獨的java應用,新增jars根據下面的圖片.


讀取Excel檔案

假設我們有一個叫Sample.xlsx的Excel檔案,裡面有兩個sheet並且下面圖片中的資料.我們想要讀取這個Excel檔案並且建立Countries list.sheet1有些額外的資料,當我們解析時會忽略它.



我們的國家(Country)java bean如下:

Country.java

[java] view plaincopyprint?在CODE上檢視程式碼片派生到我的程式碼片
  1. package com.journaldev.excel.read;  
  2. publicclass Country {  
  3.     private String name;  
  4.     private String shortCode;  
  5.     public Country(String n, String c){  
  6.         this.name=n;  
  7.         this.shortCode=c;  
  8.     }  
  9.     public String getName() {  
  10.         return name;  
  11.     }  
  12.     publicvoid setName(String name) {  
  13.         this.name = name;  
  14.     }  
  15.     public String getShortCode() {  
  16.         return shortCode;  
  17.     }  
  18.     publicvoid setShortCode(String shortCode) {  
  19.         this.shortCode = shortCode;  
  20.     }  
  21.     @Override
  22.     public String toString(){  
  23.         return name + "::" + shortCode;  
  24.     }  
  25. }  

讀取Excel檔案並建立Countries list程式碼如下:

ReadExcelFileToList.java

[java] view plaincopyprint?在CODE上檢視程式碼片派生到我的程式碼片
  1. package com.journaldev.excel.read;  
  2. import java.io.FileInputStream;  
  3. import java.io.IOException;  
  4. import java.util.ArrayList;  
  5. import java.util.Iterator;  
  6. import java.util.List;  
  7. import org.apache.poi.hssf.usermodel.HSSFWorkbook;  
  8. import org.apache.poi.ss.usermodel.Cell;  
  9. import org.apache.poi.ss.usermodel.Row;  
  10. import org.apache.poi.ss.usermodel.Sheet;  
  11. import org.apache.poi.ss.usermodel.Workbook;  
  12. import org.apache.poi.xssf.usermodel.XSSFWorkbook;  
  13. publicclass ReadExcelFileToList {  
  14.     publicstatic List<Country> readExcelData(String fileName) {  
  15.         List<Country> countriesList = new ArrayList<Country>();  
  16.         try {  
  17.             //Create the input stream from the xlsx/xls file
  18.             FileInputStream fis = new FileInputStream(fileName);  
  19.             //Create Workbook instance for xlsx/xls file input stream
  20.             Workbook workbook = null;  
  21.             if(fileName.toLowerCase().endsWith("xlsx")){  
  22.                 workbook = new XSSFWorkbook(fis);  
  23.             }elseif(fileName.toLowerCase().endsWith("xls")){  
  24.                 workbook = new HSSFWorkbook(fis);  
  25.             }  
  26.             //Get the number of sheets in the xlsx file
  27.             int numberOfSheets = workbook.getNumberOfSheets();  
  28.             //loop through each of the sheets
  29.             for(int i=0; i < numberOfSheets; i++){  
  30.                 //Get the nth sheet from the workbook
  31.                 Sheet sheet = workbook.getSheetAt(i);  
  32.                 //every sheet has rows, iterate over them
  33.                 Iterator<Row> rowIterator = sheet.iterator();  
  34.                 while (rowIterator.hasNext())   
  35.                 {  
  36.                     String name = "";  
  37.                     String shortCode = "";  
  38.                     //Get the row object
  39.                     Row row = rowIterator.next();  
  40.                     //Every row has columns, get the column iterator and iterate over them
  41.                     Iterator<Cell> cellIterator = row.cellIterator();  
  42.                     while (cellIterator.hasNext())   
  43.                     {  
  44.                         //Get the Cell object
  45.                         Cell cell = cellIterator.next();  
  46.                         //check the cell type and process accordingly
  47.                         switch(cell.getCellType()){  
  48.                         case Cell.CELL_TYPE_STRING:  
  49.                             if(shortCode.equalsIgnoreCase("")){  
  50.                                 shortCode = cell.getStringCellValue().trim();  
  51.                             }elseif(name.equalsIgnoreCase("")){  
  52.                                 //2nd column
  53.                                 name = cell.getStringCellValue().trim();  
  54.                             }

    相關推薦

    使用Apache POI APIExcel

    有時候我們需要從Excel檔案中讀取資料,或者我們為了商務或者財政的目的生成Excel格式的報表.Java沒有對操作Excel檔案提供內在的支援,所以我們需要尋找開源的APIs.當我開始尋找操作Excel的APIs時候,大部分人建議使用JExcel或者Apache POI. 在深入研究後,我

    ApachePOI工具類Excel操作

    package com.shtel.cpc.data.poi.example; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.*; import

    Apache POIExcel文件入門(支援XLS和XLSX格式)

    值得一提的是,POI的全稱是Poor Obfuscation Implementation,意為“簡陋又模糊的實現”,這和slf4j(Simple Log Facade for Java,Java簡單日誌門面)的取名有異曲同工之妙。這兩個東西實際上是非常強大的,但是它們的作者卻說自己的東西很poor、很sim

    Java 利用Apache POI Excel檔案超出行列限制

    1.首先說明,不管那個版本的Excel都有行、列數限制 可以開啟EXCEL 2003(xls)或EXCEL 2010以上(xlsx),通過CTRL + ↓與CTRL + → 即可看到: 1

    JavaExcelPOI超入門(轉)

    num mov war copy rbo workbook mon move dropdown   Apache POI 是用Java編寫的免費開源的跨平臺的 Java API,Apache POI提供API給Java程式對Microsoft Office格式檔案讀和寫的功

    poi Excel小工具 部分原始碼

    功能  如果匹配條件相同 則把路徑2 的值賦值到路徑一 部分原始碼   //獲取表名     public static String[] getSheetNames(String filePath) { &nb

    Java 操作Excel poiexcel

    Java 操作Excel poi讀寫excel,excel匯入匯出(精簡版) 1.所需jar包 下載地址:https://download.csdn.net/download/u014646662/10734734 2.原始碼 寫操作(excel匯出) package cn

    利用POIExcel

        Apache下的POI用來操作Excel非常方便,如果操作.xsl(03版本)則用HSSFWorkbook,若操作.xslx(07版本)則用XSSFWorkbook 程式碼清單如下: ExcelOperation: package com.excel.rw;

    poiExcel並匯入資料

    首先寫個工具類 用來讀寫Excel的 ... import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.util

    Java POI Excel 檔案簡單實現

    整理FileUtils的一些方法,只是一些初步實現,剛寫完就掛上來了… 友情提示:**過於結構化,沒太多潤色....碼的不好還請諸位海涵並多提意見** 關聯的型別 資源 型別 說明 Workbook 介面 Ex

    javaexcelPOI,支援xls和xlsx兩種格式)

    這應該是一個比較全的示例了,更加複雜的功能可以在此基礎上擴充套件。此示例基於apache的POI類庫,相關jar包就不列舉了。這個類庫很通用,網上很好找。 1、不包含單元格合併的寫excel /** * excel匯出到輸出流 * 誰呼叫誰負責關閉輸出流 *

    JavaExcelPOI超入門

    Apache POI 是建立和維護操作各種符合Office Open XML(OOXML)標準和微軟的OLE 2複合文件格式(OLE2)的Java API。用它可以使用Java讀取和建立,修改MS Excel檔案.而且,還可以使用Java讀取和建立MS Word和MSPowerPoint檔案。Apac

    POI事件驅動模式Excel和格式設定及2007EXCEL解析SAXParser類找不到

    POI事件驅動模式讀寫Excel 目前處理Excel的開源javaAPI主要有兩種,一是Jxl(Java Excel API),Jxl只支援Excel2003以下的版本。另外一種是Apache的Jakarta POI,相比於Jxl,POI對微軟辦公文件的支援更加強大,但

    maven配置 poi 3.5包 excel 2007 xlsx

    參考了 上面有說明引入那些包的,但沒有說明maven怎麼配置,一般會以為maven配置時引入poi就行,試了一下,發現引入後不會自動加入另外需要的包,難道非要額外自己引入其他需要的包不可嗎? 不是的,試了一下,其實不引入poi而是引入poi-ooxml就會自動引入操作xl

    使用POIEXCEL檔案 [poi3.9]

    讀SHEET內容: 寫入紅框中內容: 執行結果: 匯入jar包: 類和程式碼: package com.itcast.poi.helloworld; import java.io.File; import java.io.FileInputStream;

    POIexcel例項 (1)

    excel讀入進行單元格賦值 package testPOI; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; i

    使用phpexcel類excel文件

    如何 blank 第三方類庫 第三方類 文件 pex ffi bsp 地址 使用原生php讀寫excel文件的博文地址: 基於使用原生php讀寫excel文件的不靠譜,本文將簡單介紹如何使用第三方類庫phpexcel來讀寫excel文件。 首先,需要到githut下載php

    pythonexcel

    字符串 一行 工作 default print file 設置 logs open python讀寫excel: # coding=utf-8 import xlrd import xlwt import traceback from xlutils.copy imp

    Pythonexcel表格的方法

    python excel 表格 xls 目的:實現用python做excel的讀取、新增、修改操作。環境:ubuntu 16.04 Python 3.5.2用python讀寫文檔,一般是操作txt文件或者可以用記事本打開的文件,因為這個操作很直接,不需要導入其他模塊,但如果想要對excel表

    Pythonexcel表格的方法二

    python excel 讀寫表格 目的:實現用python的另一種方法做excel的讀取、新增操作。環境:ubuntu 16.04 Python 3.5.2情景:之前介紹了一種操作excel文件的方法(私鏈),現在使用另一種方法讀寫excel文件,一次性讀出或寫入,讀寫也很方便,讀出為有序字典