Top > OOobbs2 > 74

OOobbs2/74 Edit

  • サマリ: Python-UNO 関連
  • 環境: General
  • 状態: 投稿
  • 投稿者: はにゃ??
  • 投稿日: 2007-09-29 (土) 21:35:41

質問 Edit

Python-UNO は海外ではよく利用されていますが日本ではさっぱりです。ユーザーが増えることを願ってすこしここで取り上げてみます。

回答 Edit

概要 Edit

Python-UNO (Py-UNO) は Python-UNO ブリッジを介して python から OpenOffice.org API を利用する OOo-Python 間の仲立ちをしてくれます。単純に Python から OOo を操作できるとみなしてかまいません。

使い方は自分で調べるという人のためにいくつかページを挙げておきます。

Python-UNO ブリッジは C++ で書かれたコードなので高速に動作します。また、スクリプトの実行速度は OOo Basic と比較できないほど早いです (C++、Java などとは比較しません)。

OpenOffice.org の Windows パッケージではわざわざ取り除かなければ Python が一緒にインストールされます。Python 2.3.4 の実行環境がついてきます。

また、Linux などの環境では Py-UNO パッケージをインストールしておく必要があります。

拡張機能として配布できるようにするのであればいまのところ Python 2.3.4 で動作するコードを書く必要があります。

Py-UNO でできること Edit

Py-UNO では次の三種類のことができます。

  • Scripting Framework スクリプトのマクロとして動作
  • UNO コンポーネント作成
  • Py-UNO bridge を介して外部 Python から OOo オートメーション

マクロとしてというのは、OOo Basic で書いたマクロのように実行できるということです。また、UNO コンポーネント作成は新しいサービスを実装できます。Py-UNO bridge を介してというのは、OOo と関係の無い Python スクリプトからドキュメントを作成するために OOo を利用できることになります。

各種取得 Edit

各種いろいろなものを Py-Uno で利用する方法。OOo Basic で行う場合と対比させてみます。

uno や unohelper は OOo の program ディレクトリに置かれています。利用に際して import しておきます。

import uno
import unohelper

XSCRIPTCONTEXT Edit

Scripting Framework のスクリプトで使われる XSCRIPTCONTEXT グローバル変数は Py-UNO でも利用できます。これを使うのはマクロとして実行するときです。

現在のドキュメントを取得します。

XSCRIPTCONTEXT.getDocument()

StarDesktop.getCurrentComponent() 'OOo Basic

デスクトップ com.sun.star.frame.Desktop サービスを取得します。

XSCRIPTCONTEXT.getDesktop()

StarDesktop 'OOo Basic
CreateUnoService("com.sun.star.frame.Desktop") 'another

コンポーネントコンテキストを取得します。

XSCRIPTCONTEXT.getComponentContext()

GetDefaultContext() 'OOo Basic

サービスマネージャ Edit

MultiServiceFactory を利用するには次のようにします。ctx はコンポーネントコンテキストです。

smgr = ctx.ServiceManager
oServiceManager = GetProcessServiceManager() ' OOo Basic

サービス Edit

サービスマネージャから createInstanceWithContext メソッドで作成します。

desktop = smgr.createInstanceWithContext("com.sun.star.frame.Desktop",ctx)
oDesktop = CreateUnoService("com.sun.star.frame.Desktop") 'OOo Basic

struct Edit

struct の作成
uno.createUnoStruct("com.sun.star.awt.Size")

OOo Basic では

CreateUnoStruct("com.sun.star.awt.Size")

や Dim ... New As ...

enum Edit

enum は import します。

from com.sun.star.awt.WindowClass import TOP as UNO_WC_TOP

また、次のようにも出来ます。

uno.Enum("com.sun.star.awt.WindowClass","TOP")

OOo Basic では

nEnum = com.sun.star.awt.WindowClass.TOP

With ステートメントも利用できます。

Constants Edit

enum 同様に import します。

from com.sun.star.beans.MethodConcept import ALL as UNO_MC_ALL

また、

uno.getConstantByName("com.sun.star.beans.MethodConcept.ALL")

OOo Basic は enum と同様。

配列 Edit

配列というより UNO の sequence 型。API 関数から戻される sequence は Py-UNO ではタプルになります。また、メソッドの引数として与えるときもタプルで与えます。tuple、list などで必要に応じて変換したりしなければいけません。

edit_model.setPropertyValues(
  ("MultiLine",),
  (True,) )
oEdit_model.setPropertyValues( _
  Array("MultiLine"), Array(true) ) ' OOo Basic

boolean Edit

True または False

OOo Basic だと大文字と小文字に依存しませんが、python だと syntax error になります。

string Edit

文字列は python unicode。8 bit を与えたときは自動的に変換されます。

URL <-> System FilePath Edit

システムパスから URL

unohelper.systemPathToFileUrl( systemPath )

URL からシステムパス

unohelper.fileUrlToSystemPath( url )

ダイアログ Edit

com.sun.star.awt.DialogProvider サービスを利用してダイアログエディタで作成したダイアログが利用できます。ボタンなどのリスナーは UNO コンポーネントを設定していないのであればリスナーを設定する必要があります。

def dialog_test():
	ctx = XSCRIPTCONTEXT.getComponentContext()
	smgr = ctx.ServiceManager
	dialogprovider = smgr.createInstanceWithContext(
	   "com.sun.star.awt.DialogProvider",ctx)
	url = "vnd.sun.star.script:Standard.Dialog1?location=application"
	dialog = dialogprovider.createDialog(url)
	dialog.execute()

実行するスクリプト一覧に表示する関数名 Edit

OOo で python スクリプトをマクロとして実行するときは関数定義を実行する形になります。一覧に表示したい名前を制限するには次のようにします。

g_exportedScripts = calc_thread,

タプルで表示したい関数名を指定します。g_exportedScripts の変数名を変えてはいけません。


感想,コメント,メモ Edit



Reload   New Lower page making Edit Freeze Diff Upload Copy Rename   Front page List of pages Search Recent changes Backup   Help   RSS of recent changes