问题描述
最近有需求要处理word中的表格然后想用POI这个库下了3.7的版本最近又出了3.8的版本一共试过这么两段代码第一段try{FileInputStreamin=newFileInputStream("D:\XBRL.doc");//载入文档POIFSFileSystempfs=newPOIFSFileSystem(in);HWPFDocumenthwpf=newHWPFDocument(pfs);Rangerange=hwpf.getRange();//得到文档的读取范围intparaNum=range.numParagraphs();intm=0;//数组下标String[]ret=newString[paraNum];for(inti=0;i<paraNum;++i){//从每一段落中获取文字,每一段是一个回车Paragraphp=range.getParagraph(i);booleantest=p.isInTable();//判断该Paragraph是否在word的表格中if(test==true){Tabletable=range.getTable(p);//通过第一个在table中的Paragraph来获取整个tableintnumRow=table.numRows();//获取table中的行数for(intj=0;j<numRow;j++){TableRowtablerow=table.getRow(j);//获得一行intnumbercell=tablerow.numCells();//通过tablerow获取单元格个数for(intk=0;k<numbercell;k++){TableCelltablexell=tablerow.getCell(k);//获得单元格intp1=tablexell.numParagraphs();//获取单元格中的Paragraph的个数Stringstr="";for(intl=0;l<p1;l++){Paragraphpara=tablexell.getParagraph(l);str=str+para.text().trim();//得到单元格中的内容}for(intn=m;n<paraNum;){ret[n]=str;//将单元格中的内容方入数组元素中break;}m++;}}}}for(inti=0;i<paraNum;i++){System.out.println(ret[i]);}}catch(Exceptione){e.printStackTrace();}
第二段try{POIFSFileSystemfs=newPOIFSFileSystem(newFileInputStream("D:\XBRL.doc"));HWPFDocumentdoc=newHWPFDocument(fs);Rangerange=doc.getOverallRange();TableIteratorti=newTableIterator(range);//Tabletable=null;while(ti.hasNext()){System.out.println("Gettingtable!");Tabletable=(Table)ti.next();System.out.println("Numberofrows:"+table.numRows());for(inta=0;a<table.numRows();a++){TableRowrow=table.getRow(a);System.out.println("tTablerownumber:"+a);for(intb=0;b<row.numCells();b++){System.out.println("ttTablecellnumber:"+b);TableCelltablecell=row.getCell(b);for(intc=0;c<tablecell.numParagraphs();c++){Paragraphtablepara=tablecell.getParagraph(c);for(intd=0;d<tablepara.numCharacterRuns();d++){CharacterRunrun=tablepara.getCharacterRun(d);System.out.println("ttText:""+run.text()+""");}}}}System.out.println("n");}}catch(Exceptione){e.printStackTrace();}
但是都报错了在一个next()方法调用的地方我看很多人都是用这样的代码解析的想问问错在哪里?或者说是poi版本更新后的问题?