JDK1.4读取word中的表格

本文介绍了一种从Word2003文档中提取文本段落和表格数据的方法,不支持图片读取。通过使用特定的Java代码,能够定位到文档中的指定位置并获取所需内容。
下载<a target=_blank href="http://download.csdn.net/detail/lewjun072/8528995">必要的jar</a>	
/**
	 * <p>
	 * 对已知格式的word2003编辑的doc进行读取段落和表格中的列,不能读取图片
	 * </p>
	 * <blockquote>
	 * 
	 * <pre>
	 *	String doc = "files/1.doc";
	 *	File docFile = new File( doc );
	 *
	 *	Map<String, int[][]> map = new HashMap<String, int[][]>();
	 *	map.put( "docTitle", new int[][] { { 1, -1 } } );// read paragraph
	 *	map.put( "taskNO",   new int[][] { { 2, -1 } } );
	 *	map.put( "zbdw",     new int[][] { { 3,  1 } } );// read tbl in row 4 cell 2
	 *	map.put( "key1",   	 new int[][] { {       } } );
	 *	map.put( "key2",   	 new int[][] {           } );
	 *	map.put( "key3",   	 null			           );
	 *
	 *	WordUtil readWordUtil = WordUtil.getDefault();
	 *	Map<String, String> result = readWordUtil.readDoc2003( map, docFile );
	 *	if ( result != null ) {
	 *		System.out.println( result.get( "docTitle" ) );
	 *		System.out.println( result.get( "taskNO" ) );
	 *		System.out.println( result.get( "zbdw" ) );
	 *	}
	 * </pre>
	 * 
	 * </blockquote>
	 * 
	 * @param map
	 *            要读取的数据,key为了方便再次的返回数据,value是一个二维数组,当第二维小于0时,表示读取段落,例如:p.put(
	 *            "docTitle",new int[][]
	 *            {3,-1});表示读取第4行的段落,一个回车符为一个段落;当第二维≥0时,读取表格的数据例如
	 *            :p.put("zbdw",new int[][] {3,1});表示读取第4行第2列的表格数据。
	 * @param docFile
	 *            最后由word2003编辑的doc文档
	 * @return Map, the return's value of Map never eq null, nulls has be handler to blank string
	 * @author LewJun
	 * 
	 */
	public Map readDoc2003(Map map, File docFile) {
		Map result = null;
		InputStream input = null;
		HWPFDocument doc = null;
		Range range = null;
		Iterator iterator = null;
		try {
			// ready
			result = new HashMap();
			input = new FileInputStream( docFile );
			doc = new HWPFDocument( input );
			range = doc.getRange();

			iterator = map.entrySet().iterator();
			// read paragraph (:
			while ( iterator.hasNext() ) {
				Map.Entry kv = (Map.Entry) iterator.next();
				String k = (String) kv.getKey();
				int[][] v = (int[][]) kv.getValue();
				try {
					int v00 = v[0][0];
					int v01 = v[0][1];

					if ( v01 < 0 && v00 >= 0 ) {
						Paragraph paragraph = range.getParagraph( v00 );
						if ( paragraph != null ) {
							result.put( k, ( "" + paragraph.text() ).trim()//
									// .replace( "\r", "" ).replace( "\t", ""
									// ).replace( "", "" ) //
									.replaceAll( "\r", "" ).replaceAll( "\t", "" ).replaceAll( "", "" ) //
							);
						} else {
							result.put( k, "" );
						}
					}

				} catch ( Exception e ) {
					e.printStackTrace();
					continue;
				}
			}
			// read paragraph :)
			//
			//
			// read table (:
			TableIterator ti = new TableIterator( range );
			while ( ti.hasNext() ) {
				Table tb = (Table) ti.next();

				iterator = map.entrySet().iterator();
				while ( iterator.hasNext() ) {
					Map.Entry kv = (Map.Entry) iterator.next();
					String k = (String) kv.getKey();
					int[][] v = (int[][]) kv.getValue();

					try {
						int v00 = v[0][0];
						int v01 = v[0][1];
						if ( v01 >= 0 && v00 >= 0 ) {
							Paragraph paragraph = tb.getRow( v00 ).getCell( v01 ).getParagraph( 0 );
							result.put( k, ( "" + paragraph.text() ).trim()//
									// .replace( "\r", "" ).replace( "\t", ""
									// ).replace( "", "" ) //
									.replaceAll( "\r", "" ).replaceAll( "\t", "" ).replaceAll( "", "" ) //
							);
						}
					} catch ( Exception e ) {
						e.printStackTrace();
						continue;
					}
				}
			}
			// read table :)

			iterator = result.entrySet().iterator();
			// 如果key对应的value为null,那么处理为空字符串
			while ( iterator.hasNext() ) {
				Map.Entry entry = (Map.Entry) iterator.next();
				if ( entry.getValue() == null ) {
					result.put( entry.getKey(), "" );
				}
			}

			// 如果参数Map中的key对应于返回结果Map的key不存在,那么处理返回结果Map的key对应的结果为空字符串
			iterator = map.entrySet().iterator();
			while ( iterator.hasNext() ) {
				Map.Entry kv = (Map.Entry) iterator.next();
				if ( !result.containsKey( kv.getKey() ) ) {
					result.put( kv.getKey(), "" );
				}
			}

			return result;
		} catch ( Exception e ) {
			e.printStackTrace();
			return null;
		} finally {
			// release stream
			if ( input != null ) {
				try {
					input.close();
					input = null;
				} catch ( IOException e ) {
					e.printStackTrace();
				}
			}
		}
	}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值