`
evoleht
  • 浏览: 96437 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

EXT JAVA POI 解析WORLD

    博客分类:
  • POI
阅读更多

最近项目需要读取用户world文件,将其入库。

 

直接上代码

/**
	 * 用途说明:读取docx类型文档内容并将其内容保存到数据库(word2007、word2010等版本)
	 * 
	 * 
	 * 算法说明:采用POI来读取后缀为docx类型的word文件,
	 * 			 将文档内容保存到相应表中的相应字段
	 * 
	 * 注意事项:.
	 *
	 * @param JDBCHelper helper
	 * @param String address 文件地址
	 * @author wzs
	 * @version 2011-12-6 
	 * 
	 */
	public boolean readDocx(JDBCHelper helper,String address) {
		
		boolean flag = false;
		String caseNum = "";//案卷号
		try {
			OPCPackage opcPackage = POIXMLDocument.openPackage(address);
			XWPFDocument xwdoc = new XWPFDocument(opcPackage);
			Iterator<XWPFTable> it = xwdoc.getTablesIterator();
			
			int i = 0;//循环读取案件号,world中表格之外的内容
			
			/**
			 * 读取表格之外的案卷号
			 * (前提:标准表格,存在案卷号。)
			 */
			while(1>0){
				String str = xwdoc.getParagraphArray(i).getText();//以每个回车为一行读取
			    String[] strArr  = str.split(":");
			    if(strArr.length>0){//如果此行为案卷号,则取出案卷号
			    	if("案卷号".equals(strArr[0])){ //前提:world格式为        案卷号:2011海淀管字353144
				    	caseNum = strArr[1];
				    	break;//取出案卷号后跳出循环
				    }
			    }
			    i++;//若果本行没有案卷号则继续循环直到找到案卷号所在行
			}
				
			while (it.hasNext()) { 
			 XWPFTable table = it.next();
			 String []obj = new String[2];
	          int num = table.getNumberOfRows();//获取表格行数
	          for(int k = 0; k< num ; k++){
	        	  int tnum = table.getRow(i).getTableCells().size();//表格列数
	        	   for(int j = 0;j < tnum; j++){
	        		   System.out.println(" 第  "+ k +"行	--第"+j+"列 --"+table.getRow(k).getTableCells().get(j).getText());
	        		   
	        		   flag = this.addItemsCaseReport(helper,obj);//将数据保存入库
	        	   }
	          }
	          }
		} catch (Exception e) {
			log.error("读取world出错!",e);
		} 
	      
		return flag;
	}

 

/**
	 * 用途说明:读取doc类型文档内容并将其内容保存到数据库(word2003等版本)
	 * 
	 * 
	 * 算法说明:采用POI来读取后缀为doc类型的word文件,
	 * 			 将文档内容保存到相应表中的相应字段
	 * 
	 * 注意事项:.
	 *
	 * @param JDBCHelper helper
	 * @param String address 文件地址
	 * 
	 * @author wzs
	 * @version 2011-12-6 
	 */
	public boolean readDoc(JDBCHelper helper,String address) {
		
		boolean flag = false;
		String caseNum = "";//案卷号
		try{  
	        FileInputStream in = new FileInputStream(address);//载入文档  
	        POIFSFileSystem pfs = new POIFSFileSystem(in);     
	        HWPFDocument hwpf = new HWPFDocument(pfs);
	        
	        Range range = hwpf.getRange();//得到文档的读取范围  
	        	
			int n = 0;//循环读取案件号,world中表格之外的内容
			
			/**
			 * 读取表格之外的案卷号
			 * (前提:标准表格,存在案卷号。)
			 */
			while(1>0){
				String  str = range.getParagraph(i).text();//以每个回车为一行读取
			    String[] strArr  = str.split(":");
			    if(strArr.length>0){//如果此行为案卷号,则取出案卷号
			    	if("案卷号".equals(strArr[0])){ //前提:world格式为        案卷号:2011海淀管字353144
				    	caseNum = strArr[1];
				    	break;//取出案卷号后跳出循环
				    }
			    }
			    n++;//若果本行没有案卷号则继续循环直到找到案卷号所在行
			}
			
	        TableIterator it = new TableIterator(range);
	        
	           //迭代文档中的表格  
	            while (it.hasNext()) {     
	                Table tb = (Table) it.next();     
	                
	                //迭代行,默认从0开始  
	                for (int i = 0; i < tb.numRows(); i++) {     
	                    TableRow tr = tb.getRow(i);     
	                    //迭代列,默认从0开始  
	                    for (int j = 0; j < tr.numCells(); j++) {     
	                        TableCell td = tr.getCell(j);//取得单元格  
	                        //取得单元格的内容  
	                        for(int k=0;k<td.numParagraphs();k++){  //循环回车(我理解)   
	                            Paragraph para =td.getParagraph(k);//k为第几个回车     
	                            String s = para.text();     
	                            System.out.println("第"+i+"行---第"+j+"列---"+k+"--  "+s);  
	                        } //end for      
	                    }   //end for  
	                }   //end for  
	                
	            } //end while  
	        
	    }catch(Exception e){
	       log.error("读取doc文件出错!",e);  
	    } 
	    return flag;
	}

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics