首先是我试图实现的背景。我基本上是在创建一个报告,并根据用户选择将其导出为不同的格式(odt、doc 和 pdf)。
所以我的方法是,我以开放文档格式 odt 生成整个文档(在您通过规范和 XML 工作之后,这非常整洁),然后我使用 openoffice com 接口以编程方式打开文档并将其保存在 word 中或 pdf 格式。
到目前为止,这很完美,但我的问题是目录没有更新。
在 DOC 格式中并不重要,因为用户可以事后手动执行,但在 PDF 中,用户没有此选项。
我记录了 TOC 更新的宏并尝试使用它,但不知何故它不起作用。我没有给我一条错误消息,但它只是没有触发.. 下面是 Makro:
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”的那两行不起作用。