2

まず、私が達成しようとしていることの背景に。私は基本的にレポートを作成しており、ユーザーが選択したレポートをさまざまな形式 (odt、doc & pdf) にエクスポートします。

したがって、私のアプローチは、オープン ドキュメント形式 odt でドキュメント全体を生成することです (これは、仕様と XML を使用して作業した後は非常にきれいです)。次に、openoffice com インターフェイスを使用してドキュメントをプログラムで開き、Word で保存します。またはpdfで。

これは今のところ完璧に機能しますが、目次が更新されないという問題があります。

DOC 形式ではユーザーが後で手動で行うことができるため、それほど重要ではありませんが、PDF ではユーザーはこのオプションを取得できません。

TOC更新のマクロを記録して使ってみたのですが、なぜかうまくいきません。エラーメッセージは表示されませんが、起動しません。以下はマクロです。

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」を含む2行だけです。

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 に追加することで、非常にシンプルで効率的な回避策を使用しました。マクロが行っていることは、「コンテンツ」というテキストを見て、1 行下に移動し、選択した目次を更新することだけです。しかし、これは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 に答える