I have a word template that has multiple similar tables and some paragraphs associated to those tables placed just before them. Depending on the amount of data, I populate some tables and others are not required, so are there paragraphs.

I need to remove these tables and paragraphs.

As you can see in the image, I need to remove Table 2 and its paragraph Table Parahgraph

Please help me how to do it. I tried using document.removeBodyElement(pos) , but it does not help.

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

}

解决方案

The problem is that using removeBodyElement shifts the rest of the elements and recalculates their indices. It means, that if you want to delete elements #4 to #6 (empty paragraph between two tables is included), then after deleting the element #4 (empty line), it is your second TABLE (and not its title paragraph) that will become the element #5, etc. Basically, this loop becomes jumping by two elements (i+=2 instead of i++), thus deleting only half of what you want, and even deleting something you don't want to delete.

Thus, you have just to reverse the order of your loop:

for ( int i = endIndex; i >= startIndex; i-- ) {

System.out.println( "removing bodyElement #" + i );

document.removeBodyElement( i );

}

I've tested it with a template, similar to your example, it works fine! Hope it helps.

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐