如何使用apache poi从java中删除包含docx数据的表和段落

时间:2014-02-23 13:28:36

标签: apache-poi docx xwpf paragraphs

我有一个单词模板,它有多个相似的表格和一些与它们之前放置的表格相关联的段落。根据数据量,我填充了一些表,而其他表不是必需的,因此有段落。

my_img

我需要删除这些表和段落。 正如您在图像中看到的,我需要删除表2及其段落Parahgraph

请帮我怎么做。我尝试使用document.removeBodyElement(pos),但它没有帮助。

int startIndex = 0;
int endIndex = 0;
startIndex = doc.getPosOfTable(doc.getTables().get(0));
startIndex++;
endIndex = doc.getPosOfTable(doc.getTables().get(1));
System.out.println("startIndex "+ startIndex);
System.out.println("endIndex "+ endIndex);

for(int i=startIndex; i<=endIndex; i++){
    doc.removeBodyElement(i);
}

1 个答案:

答案 0 :(得分:5)

问题是使用removeBodyElement 会移动其余元素并重新计算其索引。这意味着,如果你想要删除元素#4到#6(包括两个表之间的空段),那么在删除元素#4(空行)之后,它是你的第二个TABLE(而不是它的标题段落)将成为元素#5等。基本上,这个循环变为跳过两个元素(i+=2而不是i++),因此只删除你想要的一半,并且甚至删除你不想删除的内容。

因此,您只需要颠倒循环的顺序

for ( int i = endIndex; i >= startIndex; i-- ) {
    System.out.println( "removing bodyElement #" + i );
    document.removeBodyElement( i );
}

我已经使用模板对其进行了测试,类似于您的示例,它运行正常!希望它有所帮助。