清除表格书签.docx (10.4 KB)
aspose.words 16.4.0将上面内容为表格的书签进行置空时报错:
java.lang.IllegalArgumentException: Cannot insert a node of this type at this location.
public static void main(String[] args) {
try {
String fileName1 = "D:\\测试文件\\apose\\words\\restrictEditing\\清除表格书签.docx";
String fileName2 = "D:\\测试文件\\apose\\words\\restrictEditing\\清除表格书签-result.docx";
String bookmarkName = "bookmark";
Document document = new Document(fileName1);
Bookmark bookmark = document.getRange().getBookmarks().get(bookmarkName);
// 书签内容置空
bookmark.setText("");
// 保存保护后的文档
document.save(fileName2);
} catch (Exception e) {
log.info("处理异常:", e);
}
}
更新到aspose.words 25.7 置空后,书签置空后,书签内容变成一个空的单元格:
测试后发现只有书签头部是表格才会这样
而书签头部内容不是表格时可以正常置空
@whitemeen
在使用 Aspose.Words 处理书签时,如果书签的内容是表格,尝试通过 bookmark.setText("")
将其内容置空时,可能会遇到 java.lang.IllegalArgumentException: Cannot insert a node of this type at this location
的异常。这是因为 Aspose.Words 不允许在特定位置插入不兼容的节点类型。
在更新到 Aspose.Words 25.7 版本后,虽然可以成功将书签内容置空,但结果却是一个空的单元格。这种情况通常发生在书签的起始位置是表格时。
为了解决这个问题,您可以考虑以下步骤:
-
检查书签类型:确保书签的起始位置不是表格。如果是,您需要先删除书签或将其内容替换为其他类型的节点。
-
使用 remove()
方法:如果您希望完全删除书签,可以使用 bookmark.remove()
方法,而不是尝试将其内容置空。
-
更新书签内容:如果您只想更新书签的内容,可以使用 bookmark.setText("新内容")
来替换为新的文本,而不是置空。
以下是一个示例代码,展示如何安全地处理书签:
public static void main(String[] args) {
try {
String fileName = "D:\\测试文件\\清除表格书签.docx";
Document document = new Document(fileName);
Bookmark bookmark = document.getRange().getBookmarks().get("bookmark");
// 检查书签是否为表格
if (bookmark.getBookmarkStart().getParentNode().getNodeType() == NodeType.TABLE) {
// 删除书签
bookmark.remove();
} else {
// 更新书签内容
bookmark.setText("新的书签内容");
}
// 保存文档
document.save("D:\\测试文件\\清除表格书签-result.docx");
} catch (Exception e) {
e.printStackTrace();
}
}
请根据您的具体需求调整代码。如果您有其他问题或需要进一步的帮助,请随时告诉我!
@whitemeen 如果表格前有文本,在将空字符串设置为书签后,表格和文本将被删除。你希望在表格作为表头的情况下,表格会被完全删除吗?
@whitemeen 感谢您报告此问题。 我们已经在我们的内部问题跟踪系统中打开了以下新工单,并将根据 免费支持政策 中提到的条款提供它们的修复:
Issue ID(s): WORDSNET-28512
如果您需要优先支持以及直接联系我们的付费支持管理团队,您可以获得 付费支持服务 。
@whitemeen 如果表格是页眉,可以使用下面的代码移除表格:
Document doc = new Document("input.docx");
Bookmark bookmark = doc.getRange().getBookmarks().get("bookmark");
Table table = (Table) bookmark.getBookmarkStart().getAncestor(NodeType.TABLE);
if (table != null) {
table.remove();
}
doc.save("output.docx");