关于Java读取Excel2007的文章在Google、百度上搜索一下,没有太好的例子,实现的也不算太好。查看了一下Poi,最新的 POI 3.5 beta 4 支持读写 Excel2007和PPT2007(XLSX and PPTX),自己来实现Java读取Excel2007了。
1,下载 POI 3.5 beta 4 解压,把其中的jar包导入项目文件。以我的读取为例,导入了以下jar包。
没有配置 log4j,测试时报告警报信息,应该为加载顺序导致的初始化问题造成(暂时没有找原因)。
2,建立读取 Excel2007 方法
Java代码 <embed height="15" width="14" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" allowscriptaccess="always" quality="high" flashvars="clipboard=%20%20%20%20%20%20%20%20%2F%2F%20%E6%9E%84%E9%80%A0%20XSSFWorkbook%20%E5%AF%B9%E8%B1%A1%EF%BC%8CstrPath%20%E4%BC%A0%E5%85%A5%E6%96%87%E4%BB%B6%E8%B7%AF%E5%BE%84%0A%20%20%20%20%20%20%20%20XSSFWorkbook%20xwb%20%3D%20new%20XSSFWorkbook(strPath)%3B%0A%20%20%20%20%20%20%20%20%2F%2F%20%E8%AF%BB%E5%8F%96%E7%AC%AC%E4%B8%80%E7%AB%A0%E8%A1%A8%E6%A0%BC%E5%86%85%E5%AE%B9%0A%20%20%20%20%20%20%20%20XSSFSheet%20sheet%20%3D%20xwb.getSheetAt(0)%3B%0A%20%20%20%20%20%20%20%20%2F%2F%20%E5%AE%9A%E4%B9%89%20row%E3%80%81cell%0A%20%20%20%20%20%20%20%20XSSFRow%20row%3B%0A%20%20%20%20%20%20%20%20String%20cell%3B%0A%20%20%20%20%20%20%20%20%2F%2F%20%E5%BE%AA%E7%8E%AF%E8%BE%93%E5%87%BA%E8%A1%A8%E6%A0%BC%E4%B8%AD%E7%9A%84%E5%86%85%E5%AE%B9%0A%20%20%20%20%20%20%20%20for%20(int%20i%20%3D%20sheet.getFirstRowNum()%3B%20i%20%3C%20sheet.getPhysicalNumberOfRows()%3B%20i%2B%2B)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20row%20%3D%20sheet.getRow(i)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20for%20(int%20j%20%3D%20row.getFirstCellNum()%3B%20j%20%3C%20row.getPhysicalNumberOfCells()%3B%20j%2B%2B)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20%E9%80%9A%E8%BF%87%20row.getCell(j).toString()%20%E8%8E%B7%E5%8F%96%E5%8D%95%E5%85%83%E6%A0%BC%E5%86%85%E5%AE%B9%EF%BC%8C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20cell%20%3D%20row.getCell(j).toString()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20System.out.print(cell%20%2B%20%22%5Ct%22)%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20System.out.println(%22%22)%3B%0A%20%20%20%20%20%20%20%20%7D" src="http://kxjhlele.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" lk_mediaid="lk_juiceapp_mediaPopup_1233566748345" lk_media="yes">
此过程直接传入文件所在路径,其他一些过程已经被自动实现。
3,测试,文件为8列3563行数据,以文本方式读取内容,
Java代码 <embed height="15" width="14" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" allowscriptaccess="always" quality="high" flashvars="clipboard=%20%20%20%20public%20static%20void%20main(String%5B%5D%20args)%20%7B%0A%20%20%20%20%20%20%20%20SimpleDateFormat%20sdf%20%3D%20new%20SimpleDateFormat(%22HH%3Amm%3Ass%3ASS%22)%3B%0A%20%20%20%20%20%20%20%20TimeZone%20t%20%3D%20sdf.getTimeZone()%3B%0A%20%20%20%20%20%20%20%20t.setRawOffset(0)%3B%0A%20%20%20%20%20%20%20%20sdf.setTimeZone(t)%3B%0A%20%20%20%20%20%20%20%20Long%20startTime%20%3D%20System.currentTimeMillis()%3B%0A%20%20%20%20%20%20%20%20String%20fileName%20%3D%20%22F%3A%5C%5C%E6%88%91%E7%9A%84%E6%96%87%E6%A1%A3%5C%5C%E5%AD%A6%E7%94%9F%E7%BC%B4%E8%B4%B9%E4%BB%A3%E7%A0%81.xlsx%22%3B%0A%20%20%20%20%20%20%20%20%2F%2F%20%E6%A3%80%E6%B5%8B%E4%BB%A3%E7%A0%81%0A%20%20%20%20%20%20%20%20try%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20PoiReadExcel%20er%20%3D%20new%20PoiReadExcel()%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20%E8%AF%BB%E5%8F%96excel2007%0A%20%20%20%20%20%20%20%20%20%20%20%20er.testPoiExcel2007(fileName)%3B%0A%20%20%20%20%20%20%20%20%7D%20catch%20(Exception%20ex)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20Logger.getLogger(FastexcelReadExcel.class.getName()).log(Level.SEVERE%2C%20null%2C%20ex)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20Long%20endTime%20%3D%20System.currentTimeMillis()%3B%0A%20%20%20%20%20%20%20%20System.out.println(%22%E7%94%A8%E6%97%B6%EF%BC%9A%22%20%2B%20sdf.format(new%20Date(endTime%20-%20startTime)))%3B%0A%20%20%20%20%7D" src="http://kxjhlele.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" lk_mediaid="lk_juiceapp_mediaPopup_1233566748348" lk_media="yes">
读取所用时间为:4.172秒