0

我创建了一个 MS Word 文档,其中包含一些我想在运行时用从数据库中获取的一些文本替换的书签。
最初这个应用程序使用 OLE 自动化 (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!");
    }
}

我整理的这个简单的例程试图抓取在 Internet 上找到的一些代码似乎工作正常,但它并没有保留这些书签的格式。我不知道是否有任何其他替代方案可以达到相同的结果。难道我做错了什么?

我正在通过 UNO 使用 Open Office 3.4。

4

2 回答 2

0

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

于 2012-07-17T22:37:22.933 回答
0

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

于 2012-08-31T15:38:16.013 回答