下载<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();
}
}
}
}