程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java應用Apache POI庫讀取Excel表格文檔的示例

Java應用Apache POI庫讀取Excel表格文檔的示例

編輯:關於JAVA

Java應用Apache POI庫讀取Excel表格文檔的示例。本站提示廣大學習愛好者:(Java應用Apache POI庫讀取Excel表格文檔的示例)文章只能為提供參考,不一定能成為您想要的結果。以下是Java應用Apache POI庫讀取Excel表格文檔的示例正文


Apache POI 是用Java編寫的收費開源的跨平台的 Java API,Apache POI供給API給Java程式對Microsoft Office格局檔案讀和寫的功效。
項面前目今載頁:http://poi.apache.org/download.html

Apache POI 是創立和保護操作各類相符Office Open XML(OOXML)尺度和微軟的OLE 2復合文檔格局(OLE2)的Java API。用它可使用Java讀取和創立,修正MS Excel文件.並且,還可使用Java讀取和創立MS Word和MSPowerPoint文件。Apache POI 供給Java操作Excel處理計劃。

  • HSSF - 供給讀寫Microsoft Excel XLS格局檔案的功效。
  • XSSF - 供給讀寫Microsoft Excel OOXML XLSX格局檔案的功效。
  • HWPF - 供給讀寫Microsoft Word DOC格局檔案的功效。
  • HSLF - 供給讀寫Microsoft PowerPoint格局檔案的功效。
  • HDGF - 供給讀Microsoft Visio格局檔案的功效。
  • HPBF - 供給讀Microsoft Publisher格局檔案的功效。
  • HSMF - 供給讀Microsoft Outlook格局檔案的功效。

讀取Excel文檔示例
我們應用POI中的HSSFWorkbook來讀取Excel數據。

public void test(File file) throws IOException { 
    InputStream inp = new FileInputStream(file); 
    HSSFWorkbook workbook = new HSSFWorkbook(inp); 
     
    // workbook...遍歷操作 
  } 

上邊代碼,讀取Excel2003(xls)的文件沒成績,然則一旦讀取的是Excel2007(xlsx)的文件,就會報異常:“The supplied data appears to be in the Office 2007+ XML. You are calling the part of POI that deals with OLE2 Office Documents. You need to call a different part of POI to process this data (eg XSSF instead of HSSF)”
查閱了材料,Excel2007版本的Excel文件須要應用XSSFWorkbook來讀取,以下:

public void test(File file) throws IOException { 
    InputStream inp = new FileInputStream(file); 
    XSSFWorkbook workbook = new XSSFWorkbook(inp); 
     
    // workbook...遍歷操作 
  } 

留意:XSSFWorkbook須要額定導入poi-ooxml-3.9-sources.jar和poi-ooxml-schemas-3.9.jar。
如許,Excel2007的導入沒成績了,然則導入Excel2003又報異常。

所以,在導入Excel的時刻,盡可能能斷定導入Excel的版本,挪用分歧的辦法。
我想到過應用文件後綴名來斷定類型,然則假如有人將xlsx的後綴改成xls時,假如應用xlsx的函數來讀取,成果是報錯;固然後綴名對了,然則文件內容編碼等都纰謬。
最初,推舉應用poi-ooxml中的WorkbookFactory.create(inputStream)來創立Workbook,由於HSSFWorkbook和XSSFWorkbook都完成了Workbook接口。代碼以下:

Workbook wb = WorkbookFactory.create(is); 

可想而知,在WorkbookFactory.create()函數中,確定有做過對文件類型的斷定,一路來看一下源碼是若何斷定的:

/** 
   * Creates the appropriate HSSFWorkbook / XSSFWorkbook from 
   * the given InputStream. 
   * Your input stream MUST either support mark/reset, or 
   * be wrapped as a {@link PushbackInputStream}! 
   */ 
  public static Workbook create(InputStream inp) throws IOException, InvalidFormatException { 
    // If clearly doesn't do mark/reset, wrap up 
    if(! inp.markSupported()) { 
      inp = new PushbackInputStream(inp, 8); 
    } 
     
    if(POIFSFileSystem.hasPOIFSHeader(inp)) { 
      return new HSSFWorkbook(inp); 
    } 
    if(POIXMLDocument.hasOOXMLHeader(inp)) { 
      return new XSSFWorkbook(OPCPackage.open(inp)); 
    } 
    throw new IllegalArgumentException("Your InputStream was neither an OLE2 stream, nor an OOXML stream"); 
  } 

可以看到,有依據文件類型來分離創立適合的Workbook對象。是依據文件的頭部信息去比對停止斷定的,此時,就算改了後綴名,照樣一樣通不外。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved