最近项目需要读取用户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;
}