まず、私が達成しようとしていることの背景に。私は基本的にレポートを作成しており、ユーザーが選択したレポートをさまざまな形式 (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行だけです。