Как удалить таблицы и абзацы, содержащие данные из docx в java, используя apache poi
У меня есть шаблон слова, который имеет несколько похожих таблиц и некоторые абзацы, связанные с этими таблицами, помещенными непосредственно перед ними. В зависимости от объема данных, я заполняю некоторые таблицы, а другие не требуются, поэтому есть параграфы.
Мне нужно удалить эти таблицы и абзацы. Как вы можете видеть на изображении, мне нужно удалить таблицу 2 и ее параграф таблицы абзаца
Пожалуйста, помогите мне, как это сделать. Я пытался использовать 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 ответ
Проблема в том, что с помощью removeBodyElement
сдвигает остальные элементы и пересчитывает их показатели. Это означает, что если вы хотите удалить элементы с № 4 по № 6 (включается пустой абзац между двумя таблицами), то после удаления элемента № 4 (пустая строка) это ваша вторая таблица (а не абзац заголовка), которая станет элементом #5 и т. д. По сути, этот цикл переходит на два элемента (i+=2
вместо i++
), таким образом удаляя только половину того, что вы хотите, и даже удаляя то, что вы не хотите удалять.
Таким образом, вам нужно просто изменить порядок вашего цикла:
for ( int i = endIndex; i >= startIndex; i-- ) {
System.out.println( "removing bodyElement #" + i );
document.removeBodyElement( i );
}
Я протестировал его с помощью шаблона, похожего на ваш пример, он отлично работает! Надеюсь, поможет.