我创建了一个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,看看当你保存修改后的文档时,你是否得到了所需的结果。
我只是删除并重新创建了书签,现在一切似乎都很好。