2

首先是我试图实现的背景。我基本上是在创建一个报告,并根据用户选择将其导出为不同的格式(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”的那两行不起作用。

4

2 回答 2

3

您是否尝试过在活动中进行自动更新?

sub OnOpenDocumentUpdateAllDocumentIndexes
oIndexes = ThisComponent.getDocumentIndexes()

for i = 0 to oIndexes.getCount () - 1
 oIndexes (i).update
next i
end sub 
于 2013-09-13T01:25:44.397 回答
1

好的,现在我发现了这个问题并想出了一个解决方法!1. 目录的更新只在打开文档网时有效,而不是隐藏!所以我不得不将我的代码更改为:

wProperties[0] := MakePropertyValue('Hidden', False);
  1. 我通过向 OpenOffice 添加一个全局 Makro 来使用一个非常简单有效的解决方法,当打开文档时它将自动执行我的 Makro。Makro 所做的只是查看文本“内容”,向下移动一行并更新选定的目录。但这仅在 openOffice 开始对他的用户可见时才有效。否则它不起作用。更新它的脚本如下:

    sub UpdateTOC
    dim document   as object
    dim dispatcher as object
    document   = ThisComponent.CurrentController.Frame
    sub UpdateTOC
    dim document   as object
    dim dispatcher as object
    document   = ThisComponent.CurrentController.Frame
    dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
    dim args1(18) as new com.sun.star.beans.PropertyValue
    args1(0).Name = "SearchItem.StyleFamily"
    args1(0).Value = 2
    args1(1).Name = "SearchItem.CellType"
    args1(1).Value = 0
    args1(2).Name = "SearchItem.RowDirection"
    args1(2).Value = true
    args1(3).Name = "SearchItem.AllTables"
    args1(3).Value = false
    args1(4).Name = "SearchItem.Backward"
    args1(4).Value = false
    args1(5).Name = "SearchItem.Pattern"
    args1(5).Value = false
    args1(6).Name = "SearchItem.Content"
    args1(6).Value = false
    args1(7).Name = "SearchItem.AsianOptions"
    args1(7).Value = false
    args1(8).Name = "SearchItem.AlgorithmType"
    args1(8).Value = 0
    args1(9).Name = "SearchItem.SearchFlags"
    args1(9).Value = 65536
    args1(10).Name = "SearchItem.SearchString"
    args1(10).Value = "Contents"
    args1(11).Name = "SearchItem.ReplaceString"
    args1(11).Value = ""
    args1(12).Name = "SearchItem.Locale"
    args1(12).Value = 255
    args1(13).Name = "SearchItem.ChangedChars"
    args1(13).Value = 2
    args1(14).Name = "SearchItem.DeletedChars"
    args1(14).Value = 2
    args1(15).Name = "SearchItem.InsertedChars"
    args1(15).Value = 2
    args1(16).Name = "SearchItem.TransliterateFlags"
    args1(16).Value = 1024
    args1(17).Name = "SearchItem.Command"
    args1(17).Value = 0
    args1(18).Name = "Quiet"
    args1(18).Value = true
    dispatcher.executeDispatch(document, ".uno:ExecuteSearch", "", 0, args1())
    dim args2(1) as new com.sun.star.beans.PropertyValue
    args2(0).Name = "Count"
    args2(0).Value = 1
    args2(1).Name = "Select"
    args2(1).Value = false
    dispatcher.executeDispatch(document, ".uno:GoDown", "", 0, args2())
    dispatcher.executeDispatch(document, ".uno:UpdateCurIndex", "", 0, Array())
    end sub
    
于 2013-09-13T05:18:57.920 回答