文档中的表格格式错误,怎么修复

我试了你这个方法,结果还是会删除整个目录,
我试过的方法有:添加空段落、以及删除时跳过目录后的空段落

另外,如果我不保持修订状态,直接用户无感知删除,这种情况下是不会删除目录的,这是什么原因呢

@ouchli 看起来 TOC 后面的文字是 TOC 字段的一部分。

在这种情况下,我认为我们可以在FieldEnd之后检索run,并移动到另一个段落以解除文本与字段的链接。

FieldCollection fields = doc.getRange().getFields();
for (Field field : fields) {
    if (field.getType() == FieldType.FIELD_TOC) {
        Node fieldEnd = field.getEnd();
        Run run = (Run) fieldEnd.getNextSibling();
        if (run != null || run.getText().trim().isEmpty()) {
            builder.moveTo(run);
            builder.insertParagraph();
        }

        break;
    }
}

// startNode是第一个标题段落, lastHyperLink是最后一个目录段落
Node nextSibling = lastHyperLink.getNextSibling().getNextSibling();
// 这里的逻辑是找两个段落之间的节点,过滤分页符
while (Objects.nonNull(nextSibling) && !nextSibling.equals(startNode)) {
    boolean flag = NodeType.PARAGRAPH != nextSibling.getNodeType() ||
            (!nextSibling.getText().contains(ControlChar.PAGE_BREAK));
    if (flag) {
        nodes.add(nextSibling);
    }
    nextSibling = nextSibling.getNextSibling();
}

Node previousSibling = startNode.getPreviousSibling();
while (Objects.nonNull(previousSibling) && !previousSibling.equals(lastHyperLink.getNextSibling())) {
    boolean flag = NodeType.PARAGRAPH != previousSibling.getNodeType() ||
            (!previousSibling.getText().contains(ControlChar.PAGE_BREAK));
    if (flag && !nodes.contains(previousSibling)) {
        nodes.add(previousSibling);
    }
    previousSibling = previousSibling.getPreviousSibling();
}