2017-10-06 1 views
0

Apache POI 3.9を使用して.docxファイルからテーブルの内容を抽出しています。このドキュメントには、セクションごとに複数のテーブルが含まれています。セクションに関係なくすべてのテーブルの内容を抽出できます私は特定のセクションの下でテーブルの内容を抽出したい。誰でも助けてもらえますか?.docxファイル内のテーブルコンテンツ抽出セクション

の.docx概要:

セクション1:ABC 表1: 表2: セクション2:CDE 表3: 表4:

表抽出コード:

XWPFDocument documentContent = new XWPFDocument(inputStream); 
            Iterator<IBodyElement> bodyElementIterator = documentContent.getBodyElementsIterator(); 
            while(bodyElementIterator.hasNext()) 
            { 
              IBodyElement element = bodyElementIterator.next(); 
              if("TABLE".equalsIgnoreCase(element.getElementType().name())) 
         { 
                List<XWPFTable> tableList = element.getBody().getTables(); 

          //Extract the table row name and their corresponding values from the word stream content 
                tableRowValues = getTableRowValues(tableList); 

         } 
            } 

メソッド: プライベートstatic ArrayList getTableRowValues(リストtableList){

  ArrayList<String> tableValues = new ArrayList<String>(); 

      for (XWPFTable xwpfTable : tableList) 
     { 
      List<XWPFTableRow> row = xwpfTable.getRows(); 

      for (XWPFTableRow xwpfTableRow : row) 
      { 

       List<XWPFTableCell> cell = xwpfTableRow.getTableCells(); 

       for (XWPFTableCell xwpfTableCell : cell) 
       { 

       List<XWPFParagraph> para = xwpfTableCell.getParagraphs(); 
       for (XWPFParagraph xwpfTablePara : para) 
       { 
       if(xwpfTablePara!=null) 
          { 
        tableValues.add(xwpfTablePara.getText()); 

          } 
       } 


       } 
      } 
     } 
      return tableValues; 
    } 
+0

からのドキュメントを参照してくださいテキストなど

paragraph.getStyle() //filters on word styles, eg ""header1" paragraph.getNumFmt() //filters on bullet text 

は、誰もが助けてくださいもらえますか? – sam

答えて

0

私はほぼ同じことをしました。あなたはgetText()if-statementを作成することができますので、右の条件に該当する場合には、テキストのみを抽出

Iterator<IBodyElement> iter = xdoc.getBodyElementsIterator(); 

       while (iter.hasNext()) 
       {  

        IBodyElement elem = iter.next(); 

        if (elem instanceof XWPFParagraph) 
        { 
         relevantText.setText(((XWPFParagraph) elem).getText()); 
         relevantText.addBreak(); 
         relevantText.addCarriageReturn(); 
        } 

        else if (elem instanceof XWPFTable) 
        {  
         relevantText.addBreak(); 
         relevantText.setText(((XWPFTable) elem).getText()); 
         relevantText.addCarriageReturn(); 
        } 

       } 

:このコード私はその下のテーブルを持つすべてのセクションを展開して 。 例で確認できます。スタイルは、よりApache https://poi.apache.org/

関連する問題