Java读取Excel2007

关于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">
  1. // 构造 XSSFWorkbook 对象,strPath 传入文件路径  
  2. XSSFWorkbook xwb = new XSSFWorkbook(strPath);  
  3. // 读取第一章表格内容  
  4. XSSFSheet sheet = xwb.getSheetAt(0);  
  5. // 定义 row、cell  
  6. XSSFRow row;  
  7. String cell;  
  8. // 循环输出表格中的内容  
  9. for (int i = sheet.getFirstRowNum(); i < sheet.getPhysicalNumberOfRows(); i++) {  
  10.      row = sheet.getRow(i);  
  11.     for (int j = row.getFirstCellNum(); j < row.getPhysicalNumberOfCells(); j++) {  
  12.         // 通过 row.getCell(j).toString() 获取单元格内容,  
  13.          cell = row.getCell(j).toString();  
  14.          System.out.print(cell + "\t");  
  15.      }  
  16.      System.out.println("");  
  17. }  
// 构造 XSSFWorkbook 对象,strPath 传入文件路径 XSSFWorkbook xwb = new XSSFWorkbook(strPath); // 读取第一章表格内容 XSSFSheet sheet = xwb.getSheetAt(0); // 定义 row、cell XSSFRow row; String cell; // 循环输出表格中的内容 for (int i = sheet.getFirstRowNum(); i < sheet.getPhysicalNumberOfRows(); i++) { row = sheet.getRow(i); for (int j = row.getFirstCellNum(); j < row.getPhysicalNumberOfCells(); j++) { // 通过 row.getCell(j).toString() 获取单元格内容, cell = row.getCell(j).toString(); System.out.print(cell + "\t"); } System.out.println(""); }

此过程直接传入文件所在路径,其他一些过程已经被自动实现。

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">
  1. public static void main(String[] args) {  
  2.      SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss:SS");  
  3.      TimeZone t = sdf.getTimeZone();  
  4.      t.setRawOffset(0);  
  5.      sdf.setTimeZone(t);  
  6.      Long startTime = System.currentTimeMillis();  
  7.      String fileName = "F:\\我的文档\\学生缴费代码.xlsx";  
  8.     // 检测代码  
  9.     try {  
  10.          PoiReadExcel er = new PoiReadExcel();  
  11.         // 读取excel2007  
  12.          er.testPoiExcel2007(fileName);  
  13.      } catch (Exception ex) {  
  14.          Logger.getLogger(FastexcelReadExcel.class.getName()).log(Level.SEVERE, null, ex);  
  15.      }  
  16.      Long endTime = System.currentTimeMillis();  
  17.      System.out.println("用时:" + sdf.format(new Date(endTime - startTime)));  
  18. }  
public static void main(String[] args) { SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss:SS"); TimeZone t = sdf.getTimeZone(); t.setRawOffset(0); sdf.setTimeZone(t); Long startTime = System.currentTimeMillis(); String fileName = "F:\\我的文档\\学生缴费代码.xlsx"; // 检测代码 try { PoiReadExcel er = new PoiReadExcel(); // 读取excel2007 er.testPoiExcel2007(fileName); } catch (Exception ex) { Logger.getLogger(FastexcelReadExcel.class.getName()).log(Level.SEVERE, null, ex); } Long endTime = System.currentTimeMillis(); System.out.println("用时:" + sdf.format(new Date(endTime - startTime))); }

读取所用时间为:4.172秒

你可能感兴趣的:(excel2007)