最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java使用Apache POI庫(kù)讀取Excel表格文檔的示例

 更新時(shí)間:2016年06月14日 08:53:00   作者:it_wangxiangpan  
POI庫(kù)是Apache提供的用于在Windows下讀寫(xiě)各類微軟Office文檔的Java庫(kù),這里我們就來(lái)看一下Java使用Apache POI庫(kù)讀取Excel表格文檔的示例:

Apache POI 是用Java編寫(xiě)的免費(fèi)開(kāi)源的跨平臺(tái)的 Java API,Apache POI提供API給Java程式對(duì)Microsoft Office格式檔案讀和寫(xiě)的功能。
項(xiàng)目下載頁(yè):http://poi.apache.org/download.html

Apache POI 是創(chuàng)建和維護(hù)操作各種符合Office Open XML(OOXML)標(biāo)準(zhǔn)和微軟的OLE 2復(fù)合文檔格式(OLE2)的Java API。用它可以使用Java讀取和創(chuàng)建,修改MS Excel文件.而且,還可以使用Java讀取和創(chuàng)建MS Word和MSPowerPoint文件。Apache POI 提供Java操作Excel解決方案。

  • HSSF - 提供讀寫(xiě)Microsoft Excel XLS格式檔案的功能。
  • XSSF - 提供讀寫(xiě)Microsoft Excel OOXML XLSX格式檔案的功能。
  • HWPF - 提供讀寫(xiě)Microsoft Word DOC格式檔案的功能。
  • HSLF - 提供讀寫(xiě)Microsoft PowerPoint格式檔案的功能。
  • HDGF - 提供讀Microsoft Visio格式檔案的功能。
  • HPBF - 提供讀Microsoft Publisher格式檔案的功能。
  • HSMF - 提供讀Microsoft Outlook格式檔案的功能。

讀取Excel文檔示例
我們使用POI中的HSSFWorkbook來(lái)讀取Excel數(shù)據(jù)。

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

上邊代碼,讀取Excel2003(xls)的文件沒(méi)問(wèn)題,但是一旦讀取的是Excel2007(xlsx)的文件,就會(huì)報(bào)異常:“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來(lái)讀取,如下:

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

注意:XSSFWorkbook需要額外導(dǎo)入poi-ooxml-3.9-sources.jar和poi-ooxml-schemas-3.9.jar。
這樣,Excel2007的導(dǎo)入沒(méi)問(wèn)題了,但是導(dǎo)入Excel2003又報(bào)異常。

所以,在導(dǎo)入Excel的時(shí)候,盡量能判斷導(dǎo)入Excel的版本,調(diào)用不同的方法。
我想到過(guò)使用文件后綴名來(lái)判斷類型,但是如果有人將xlsx的后綴改為xls時(shí),如果使用xlsx的函數(shù)來(lái)讀取,結(jié)果是報(bào)錯(cuò);雖然后綴名對(duì)了,但是文件內(nèi)容編碼等都不對(duì)。
最后,推薦使用poi-ooxml中的WorkbookFactory.create(inputStream)來(lái)創(chuàng)建Workbook,因?yàn)镠SSFWorkbook和XSSFWorkbook都實(shí)現(xiàn)了Workbook接口。代碼如下:

Workbook wb = WorkbookFactory.create(is); 

可想而知,在WorkbookFactory.create()函數(shù)中,肯定有做過(guò)對(duì)文件類型的判斷,一起來(lái)看一下源碼是如何判斷的:

/** 
   * 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"); 
  } 

可以看到,有根據(jù)文件類型來(lái)分別創(chuàng)建合適的Workbook對(duì)象。是根據(jù)文件的頭部信息去比對(duì)進(jìn)行判斷的,此時(shí),就算改了后綴名,還是一樣通不過(guò)。

相關(guān)文章

最新評(píng)論

昌吉市| 绵竹市| 南丹县| 白水县| 涟水县| 长岛县| 南江县| 苏尼特左旗| 固原市| 红安县| 理塘县| 宝应县| 平阳县| 嵊泗县| 获嘉县| 西林县| 启东市| 上饶市| 建阳市| 纳雍县| 石台县| 宁强县| 宁波市| 吴旗县| 金阳县| 齐齐哈尔市| 四子王旗| 钟祥市| 淮阳县| 图木舒克市| 封开县| 蛟河市| 湛江市| 桂阳县| 宜川县| 华池县| 博客| 保定市| 玉林市| 连州市| 新巴尔虎左旗|