2017-10-06 32 views
0

我正在使用Apache POI 3.9從.docx文件中提取表格內容。此文檔包含不同部分下的多個表格。我可以提取所有表格內容而不考慮部分,但我只想提取特定部分下的表格內容。任何人都可以幫忙嗎?Table Content Extraction部分明智的.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); 

         } 
            } 

方法: private static ArrayList getTableRowValues(List 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

文檔誰能請幫助? – sam

回答

0

我做了同樣的事情。 有了這個代碼,我提取所有與表中的部分它下面:

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

       } 

您可以在getText()之前創建一個if-statement所以它只有在合適的條件,則提取文本。 例如你可以檢查;樣式,文本等

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

欲瞭解更多請參閱從Apache https://poi.apache.org/