Writerのマクロからカスタムプロパティの変更を行う

マクロの作成、スクリプトの作成、APIの使い方
返信する
kawasaki
記事: 5
登録日時: 9月 17, 2009, 4:27 pm

Writerのマクロからカスタムプロパティの変更を行う

投稿記事 by kawasaki »

Writerのマクロにてカスタムプロパティを書き換える作業を行っていたのですが、
OpenOfficeのVersionをあげたところうまく動作しなくなりました。

下位Versionの動作保証が出来ていないのかと思い、
OpenOfficeのVersionを下げて検証してみようとしているのですが、
今度はOpenOfficeのファイルが開けない状態になってしまいました。

原因がつかめておらず、
また、マクロにて一括編集が行えないと修正するのに手間がかかるため、
なにか解決策がないかと思い、トピックを投稿させていただきました。

<質問>
1.カスタムプロパティをマクロで書き換える動作は、VersionUpにて保証されていない動作になるのでしょうか。
  少なくとも下記Versionでは正しく動作していました。
  <Version>
   WndowsXP Professional Version2002 Service Pack3
   OpenOffice.org 3.0.0 OOO300m9 Build:9358

  下記Versionではカスタムプロパティの変更がうまく動作しません。
  <Version>
   WndowsXP Professional Version2002 Service Pack3
   OpenOffice.org 3.2.1 OOO320m18 Build:9502又は、
   OpenOffice.org 3.1.1 OOO310m19 Build:9420

2.OpenOfficeのVersionを下げる際、なにか注意するところはあるのでしょうか。
  「プログラムの追加と削除」より削除を行い、下記HPよりファイルを取得してインストールを行っています。
  http://archive.services.openoffice.org/ ... alized/ja/

バッチより実行しているマクロは下記になります。
test1~4の値部分が正しく更新されません。

コード: 全て選択

sub Main ( cFile )
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
rem document   = ThisComponent.CurrentController.Frame
cURL = ConvertToURL( cFile )
   ' Open the document. Just blindly assume that the document 
   ' is of a type that OOo will correctly recognize and open 
   ' without specifying an import filter.
   document = StarDesktop.loadComponentFromURL( cURL, "_blank", 0, _
            Array(MakePropertyValue( "Hidden", False ),))
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

GlobalScope.BasicLibraries.LoadLibrary("Tools")
oUrl = FileNameOutOfPath(cFile)
oUrl = Left( oUrl , Len( oUrl ) - 4 ) 

dim args16(17) as new com.sun.star.beans.PropertyValue
args16(0).Name = "Properties.UseUserData"
args16(0).Value = true
args16(1).Name = "Properties.DeleteUserData"
args16(1).Value = false
args16(2).Name = "Properties.Title"
args16(2).Value = oUrl
args16(3).Name = "Properties.Subject"
args16(3).Value = ""
args16(4).Name = "Properties.KeyWords"
args16(4).Value = ""
args16(5).Name = "Properties.Description"
args16(5).Value = ""
args16(6).Name = "Properties.AutoReload"
args16(6).Value = false
args16(7).Name = "Properties.AutoReloadTime"
args16(7).Value = 0
args16(8).Name = "Properties.AutoReloadURL"
args16(8).Value = ""
args16(9).Name = "Properties.AutoReloadFrame"
args16(9).Value = ""
args16(10).Name = "Properties.Field1Title"
args16(10).Value = "test1"
args16(11).Name = "Properties.Field2Title"
args16(11).Value = "test2"
args16(12).Name = "Properties.Field3Title"
args16(12).Value = "test3"
args16(13).Name = "Properties.Field4Title"
args16(13).Value = "test4"
args16(14).Name = "Properties.Field1"
args16(14).Value = "1"
args16(15).Name = "Properties.Field2"
args16(15).Value = "2"
args16(16).Name = "Properties.Field3"
args16(16).Value = "3"
args16(17).Name = "Properties.Field4"
args16(17).Value = "4"

dispatcher.executeDispatch(document.getCurrentController().getFrame(), ".uno:SetDocumentProperties", "", 0, args16())


rem 保存----------------------------------------------------------------------
dispatcher.executeDispatch(document.getCurrentController().getFrame(), ".uno:Save", "", 0, Array())

rem PDF出力-----------------------------------------------
SaveAsPDF( cFile )

document.close(True)

end sub

' Save document as an Acrobat PDF file.
Sub SaveAsPDF( cFile )
   cURL = ConvertToURL( cFile )
   ' Open the document. Just blindly assume that the document 
   ' is of a type that OOo will correctly recognize and open 
   ' without specifying an import filter.
   oDoc = StarDesktop.loadComponentFromURL( cURL, "_blank", 0, _
            Array(MakePropertyValue( "Hidden", True ),))

   cFile = Left( cFile, Len( cFile ) - 4 ) + ".pdf"
   cURL = ConvertToURL( cFile )
   
   ' Save the document using a filter.   
   oDoc.storeToURL( cURL, Array(_
            MakePropertyValue( "FilterName", "writer_pdf_Export" ),)
   
   oDoc.close( True )
End Sub

Function MakePropertyValue( Optional cName As String, Optional uValue ) _
   As com.sun.star.beans.PropertyValue
   Dim oPropertyValue As New com.sun.star.beans.PropertyValue
   If Not IsMissing( cName ) Then
      oPropertyValue.Name = cName
   EndIf
   If Not IsMissing( uValue ) Then
      oPropertyValue.Value = uValue
   EndIf
   MakePropertyValue() = oPropertyValue
End Function
以上となります。
よろしくお願いします。
OpenOffice 3.0.0
Windows XP Professional
tani
記事: 60
登録日時: 6月 13, 2008, 10:12 am

Re: Writerのマクロからカスタムプロパティの変更を行う

投稿記事 by tani »

なぜバージョンアップで動かなくなったのかはよくわかりませんが、とりあえず以下のようなコードで変更できました。
(カスタムプロパティの最初の項目名fugafuga, 値をhogehogeに変更するという動作です。documentのところは適宜差し替えてください。)

コード: 全て選択

Sub Main
  ' document = StarDesktop.loadComponentFromURL( cURL, "_blank", 0, Array(MakePropertyValue( "Hidden", False ),))
  document = ThisComponent
  oDocumentInfo = document.getDocumentInfo()
  oDocumentInfo.setUserFieldName(0, "fugafuga")
  oDocumentInfo.setUserFieldValue(0, "hogehoge")
End Sub
※LibreOffice3.3で動作確認しています。
kawasaki
記事: 5
登録日時: 9月 17, 2009, 4:27 pm

Re: Writerのマクロからカスタムプロパティの変更を行う

投稿記事 by kawasaki »

tani 様

返信ありがとうございます。

添付していただいたコードにてカスタムプロパティの変更を行うことが出来ました。
ありがとうございます。

以上、宜しくお願い致します。
OpenOffice 3.0.0
Windows XP Professional
返信する

“マクロと UNO API”に戻る