使用POI解析Word2007和Excel2007的实例代码

这周额外分配的任务是对office2007的文档进行解析,以前采用的是poi3.0版本,其只能对office2003版本的文档进行解析,还无法解析office2007.网上查了一下有人提供了最原始的解决方法,但是发现其实poi在3.5版本已经解决了这个问题。

 

下面是网上搜的一篇文章:

其实不需要完全匹配下面该文章提供的jar包,本人就是下载了poi-bin-3.6-20091214包,然后把poi-bin-3.6-20091214/poi-3.6和poi-bin-3.6-20091214/poi-3.6/ooxml-lib目录下的jar包导入到项目就ok了。

转自:http://ajava.org/code/io/13259.html

  1. package com.test;   
  2.   
  3. /**  
  4.  * 需要的jar包:  
  5.  * poi-3.0.2-FINAL-20080204.jar  
  6.  * poi-contrib-3.0.2-FINAL-20080204.jar  
  7.  * poi-scratchpad-3.0.2-FINAL-20080204.jar  
  8.  * poi-3.5-beta6-20090622.jar  
  9.  * geronimo-stax-api_1.0_spec-1.0.jar  
  10.  * ooxml-schemas-1.0.jar  
  11.  * openxml4j-bin-beta.jar  
  12.  * poi-ooxml-3.5-beta6-20090622.jar  
  13.  * xmlbeans-2.3.0.jar  
  14.  * dom4j-1.6.1.jar  
  15.  */  
  16.   
  17. import java.io.FileInputStream;   
  18. import java.io.IOException;   
  19. import java.io.InputStream;   
  20.   
  21. import org.apache.poi.POIXMLDocument;   
  22. import org.apache.poi.POIXMLTextExtractor;   
  23. import org.apache.poi.hssf.usermodel.HSSFCell;   
  24. import org.apache.poi.hssf.usermodel.HSSFRow;   
  25. import org.apache.poi.hssf.usermodel.HSSFSheet;   
  26. import org.apache.poi.hssf.usermodel.HSSFWorkbook;   
  27. import org.apache.poi.hwpf.extractor.WordExtractor;   
  28. import org.apache.poi.openxml4j.exceptions.OpenXML4JException;   
  29. import org.apache.poi.openxml4j.opc.OPCPackage;   
  30. import org.apache.poi.xssf.usermodel.XSSFCell;   
  31. import org.apache.poi.xssf.usermodel.XSSFRow;   
  32. import org.apache.poi.xssf.usermodel.XSSFSheet;   
  33. import org.apache.poi.xssf.usermodel.XSSFWorkbook;   
  34. import org.apache.poi.xwpf.extractor.XWPFWordExtractor;   
  35. import org.apache.xmlbeans.XmlException;   
  36.   
  37. public class WordAndExcelExtractor {   
  38.  public static void main(String[] args){   
  39.   try{   
  40.    String wordFile = "D:/松山血战.docx";   
  41.    String wordText2007 = WordAndExcelExtractor.extractTextFromDOC2007(wordFile);   
  42.    System.out.println("wordText2007======="+wordText2007);   
  43.       
  44.    InputStream is = new FileInputStream("D:/XXX研发中心技术岗位职位需求.xls");      
  45.    String excelText = WordAndExcelExtractor.extractTextFromXLS(is);      
  46.    System.out.println("text2003==========" + excelText);   
  47.       
  48.    String excelFile = "D:/Hello2007.xlsx";      
  49.    String excelText2007 = WordAndExcelExtractor.extractTextFromXLS2007(excelFile);   
  50.    System.out.println("excelText2007==========" + excelText2007);   
  51.   
  52.       
  53.   }catch(Exception e ){   
  54.    e.printStackTrace();   
  55.   }   
  56.  }   
  57.     
  58.  /**  
  59.   * @Method: extractTextFromDOCX  
  60.   * @Description: 从word 2003文档中提取纯文本  
  61.   *  
  62.   * @param   
  63.   * @return String  
  64.   * @throws  
  65.   */  
  66.     public static String extractTextFromDOC(InputStream is) throws IOException {   
  67.         WordExtractor ex = new WordExtractor(is); //is是WORD文件的InputStream    
  68.   
  69.         return ex.getText();   
  70.     }   
  71.     
  72.  /**  
  73.   * @Method: extractTextFromDOCX  
  74.   * @Description: 从word 2007文档中提取纯文本  
  75.   *  
  76.   * @param   
  77.   * @return String  
  78.   * @throws  
  79.   */  
  80.     public static String extractTextFromDOC2007(String fileName) throws IOException, OpenXML4JException, XmlException {   
  81.      OPCPackage opcPackage = POIXMLDocument.openPackage(fileName);   
  82.      POIXMLTextExtractor ex = new XWPFWordExtractor(opcPackage);      
  83.   
  84.         return ex.getText();   
  85.     }   
  86.     
  87.  /**  
  88.   * @Method: extractTextFromXLS  
  89.   * @Description: 从excel 2003文档中提取纯文本  
  90.   *  
  91.   * @param   
  92.   * @return String  
  93.   * @throws  
  94.   */  
  95.     @SuppressWarnings("deprecation")   
  96.  private static String extractTextFromXLS(InputStream is)   
  97.         throws IOException {   
  98.         StringBuffer content  = new StringBuffer();   
  99.         HSSFWorkbook workbook = new HSSFWorkbook(is); //创建对Excel工作簿文件的引用    
  100.   
  101.         for (int numSheets = 0; numSheets < workbook.getNumberOfSheets(); numSheets++) {   
  102.             if (null != workbook.getSheetAt(numSheets)) {   
  103.                 HSSFSheet aSheet = workbook.getSheetAt(numSheets); //获得一个sheet   
  104.   
  105.                 for (int rowNumOfSheet = 0; rowNumOfSheet <= aSheet.getLastRowNum(); rowNumOfSheet++) {   
  106.                     if (null != aSheet.getRow(rowNumOfSheet)) {   
  107.                         HSSFRow aRow = aSheet.getRow(rowNumOfSheet); //获得一行   
  108.   
  109.                         for (short cellNumOfRow = 0; cellNumOfRow <= aRow.getLastCellNum(); cellNumOfRow++) {   
  110.                             if (null != aRow.getCell(cellNumOfRow)) {   
  111.                                 HSSFCell aCell = aRow.getCell(cellNumOfRow); //获得列值   
  112.                                                                    
  113.                                 if(aCell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC){   
  114.                                  content.append(aCell.getNumericCellValue());   
  115.                                 }else if(aCell.getCellType() == HSSFCell.CELL_TYPE_BOOLEAN){   
  116.                                  content.append(aCell.getBooleanCellValue());   
  117.                                 }else {   
  118.                                  content.append(aCell.getStringCellValue());   
  119.                                 }   
  120.                             }   
  121.                         }   
  122.                     }   
  123.                 }   
  124.             }   
  125.         }   
  126.   
  127.         return content.toString();   
  128.     }   
  129.        
  130.     /**  
  131.      * @Method: extractTextFromXLS2007  
  132.      * @Description: 从excel 2007文档中提取纯文本  
  133.      *  
  134.      * @param   
  135.      * @return String  
  136.      * @throws  
  137.      */  
  138.     private static String extractTextFromXLS2007(String fileName) throws Exception{   
  139.      StringBuffer content = new StringBuffer();   
  140.         
  141.      //构造 XSSFWorkbook 对象,strPath 传入文件路径       
  142.   XSSFWorkbook xwb = new XSSFWorkbook(fileName);   
  143.      
  144.   //循环工作表Sheet   
  145.   for(int numSheet = 0; numSheet < xwb.getNumberOfSheets(); numSheet++){   
  146.    XSSFSheet xSheet = xwb.getSheetAt(numSheet);    
  147.    if(xSheet == null){   
  148.     continue;   
  149.    }   
  150.       
  151.    //循环行Row   
  152.    for(int rowNum = 0; rowNum <= xSheet.getLastRowNum(); rowNum++){   
  153.     XSSFRow xRow = xSheet.getRow(rowNum);   
  154.     if(xRow == null){   
  155.      continue;   
  156.     }   
  157.        
  158.     //循环列Cell   
  159.     for(int cellNum = 0; cellNum <= xRow.getLastCellNum(); cellNum++){   
  160.      XSSFCell xCell = xRow.getCell(cellNum);   
  161.      if(xCell == null){   
  162.       continue;   
  163.      }   
  164.         
  165.      if(xCell.getCellType() == XSSFCell.CELL_TYPE_BOOLEAN){   
  166.       content.append(xCell.getBooleanCellValue());   
  167.      }else if(xCell.getCellType() == XSSFCell.CELL_TYPE_NUMERIC){   
  168.       content.append(xCell.getNumericCellValue());   
  169.      }else{   
  170.       content.append(xCell.getStringCellValue());   
  171.      }   
  172.     }   
  173.    }   
  174.   }   
  175.      
  176.   return content.toString();   
  177.     }   
  178.        
  179. }   
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值