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

C# 替换MS Word 2010文档中的书签会丢失格式,c#,openoffice.org,openoffice-writer,uno,C#,Openoffice.org,Openoffice Writer,Uno,我已经创建了一个MS Word文档,其中包含一些书签,我想在运行时用从数据库获取的文本替换这些书签。 最初,该应用程序使用OLE Automation(Word)来完成这类工作,但后来我决定寻找一些替代方法。 我下载并使用了OpenOfficeSDK(最新版本),并实现了一个简单的项目 // Opens a MS Word document XComponent document = OpenDocument("Test.docx", "_blank", true); XNameAccess

我已经创建了一个MS Word文档,其中包含一些书签,我想在运行时用从数据库获取的文本替换这些书签。
最初,该应用程序使用OLE Automation(Word)来完成这类工作,但后来我决定寻找一些替代方法。
我下载并使用了OpenOfficeSDK(最新版本),并实现了一个简单的项目

// 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,看看保存修改后的文档时是否得到了所需的结果。

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

您能试着从书签中获取格式并在替换文本?@MosheKatz:谢谢你的帮助。我希望我知道怎么做?我正在努力处理文档,但我想不出来。