首先是我试图实现的背景。 我基本上是在创建一个报告,并根据用户选择将其导出为不同的格式(odt、doc 和 pdf)。
所以我的方法是,以开放文档格式 odt 生成整个文档(在您完成规范和 XML 后,这非常整洁),然后我使用 openoffice com 接口(interface)以编程方式打开文档并保存以 Word 或 PDF 形式提供。
到目前为止,这一切都很完美,但我遇到了目录未更新的问题。
在 DOC 格式中这并不重要,因为用户可以随后手动执行此操作,但在 PDF 中用户没有此选项。
我录制了目录更新的宏并尝试使用它,但不知何故它不起作用。我没有给我错误消息,但它只是不触发.. 以下是万客隆:
sub Main
dim document as object
dim dispatcher as object
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:UpdateCurIndex", "", 0, Array())
end sub
基本上我用它来创建它:
oDispatcher := fOpenOffice.createInstance('com.sun.star.frame.DispatchHelper');
oDispatcher.executeDispatch(fDocument.CurrentController.Frame
, '.uno:UpdateCurIndex', '', 0
, VarArrayCreate([0, 0], varVariant));
这些变体:
fOpenOffice := CreateOleObject('com.sun.star.ServiceManager');
wProperties := VarArrayCreate([0, 0], varVariant);
wProperties[0] := MakePropertyValue('Hidden', True);
fDocument := fDesktop.loadComponentFromURL('file:///' + FileName
, '_blank', 0, wProperties);`
在此过程中我是否忘记了什么?我没有列出整个源代码,它非常标准并且工作完美。只是带有“oDispatcher”的这两行不能完成这项工作。
最佳答案
您是否在事件中尝试过自动更新?
sub OnOpenDocumentUpdateAllDocumentIndexes
oIndexes = ThisComponent.getDocumentIndexes()
for i = 0 to oIndexes.getCount () - 1
oIndexes (i).update
next i
end sub
关于delphi - 如何使用Delphi和com接口(interface)更新ODT文档中的 "table of contents",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18755381/