替换MS Word 2010文档中的书签会丢失格式



我创建了一个MS Word文档,其中包含一些书签,我想在运行时用从数据库中提取的文本替换这些书签
最初这个应用程序使用OLE Automation(Word)来做这些事情,但后来我决定找到一些替代方案
我下载并使用了Open Office SDK(最新版本),并实现了一个简单的项目。

// Opens a MS Word document 
XComponent document = OpenDocument("Test.docx", "_blank", true);
XNameAccess xna = ((XBookmarksSupplier) document).getBookmarks();
string[] documentBookMarkKeys = xna.getElementNames();
if (documentBookMarkKeys.Length > 0) {
    uno.Any currentBookmark = xna.getByName("bookmark1");
    XTextContent bookmarkContent = currentBookmark.Value as XTextContent;
    if (bookmarkContent != null) {
        XTextRange xFound = bookmarkContent.getAnchor();
        xFound.setString("Some text here!");
    }
}

我把这个简单的程序放在一起,试图获取一些在互联网上找到的代码,看起来效果很好,但它并没有保持书签的格式。我不知道是否还有其他选择可以达到同样的结果。我做错什么了吗?

我通过UNO使用Open Office 3.4。

如果您的目标是将文档保存在Microsoft Word中,那么您可能需要调整您的方法。我的理解是,OpenOffice不会保留与原始文档相关的所有元数据,即根据我的经验,MS Word文档中的数据字段将只复制到文本中,并且原始数据源/数据字段的链接将丢失。我的猜测是,书签也可能发生同样的情况,因为这两个产品支持书签,所以使用OO操作Word可能会导致底层链接丢失。你可以通过手动尝试来证明这一点,即使用OO修改你的.docx,看看当你保存修改后的文档时,你是否得到了所需的结果。

我只是删除并重新创建了书签,现在一切似乎都很好。

最新更新