2010年1月30日土曜日

OpenOffice.org と Python マクロ 1 限目

最初に Python マクロの Hello World をと思ったが・・・わからない。なんせ日本語の情報が少ない。
仕方がないので、ネット上を這いずり回った。で以下の情報ソースを確保。

http://hermione.s41.xrea.com/pukiwiki/index.php?OOoPython
http://d.hatena.ne.jp/hanya_orz/20091214/p1
http://udk.openoffice.org/python/python-bridge.html
http://api.openoffice.org/docs/DevelopersGuide/DevelopersGuide.xhtml


気を取り直して作業続行。

まず、環境から整える。
  • OpenOffice.org 3.1.1
    まずこれがないとはじまらない。
  • Python 2.6.1
    マクロを作成するための、エディタとして IDLE を使いたかっただけ。単なるテキストエディタでも、eclipse の Pydev でも、とにかくテキスト編集できて、UTF-8 で保存できればなんでもよい。
IDLE からマクロ実行とかをしたかったのだが、できなかった。
OpenOffice.org は 32bit 版、Python は 64bit 版なのが悪いのかもしれない。
一応手順を書いておくが、この方法で出来る保障はないので悪しからず。
戦略としては、至って簡単。sys.path に UNO パッケージの(uno.py とかがある)場所を追加する。
IDLE 上で以下を実行してみた。(指定したパスは Vista 64bit 版での場合)

>>> import sys
>>> sys.path.append('C:\\Program Files (x86)\\OpenOffice.org 3\\Basis\\program')
>>> import uno

Traceback (most recent call last):
  File "", line 1, in
    import uno
  File "C:\Program Files (x86)\OpenOffice.org 3\Basis\program\uno.py", line 33, in
    import pyuno
ImportError: DLL load failed: %1 は有効な Win32 アプリケーションではありません。


と、怒られた。orz
懲りずに、eclipse(64bit)に Pydev を入れて、OpenOffice.org に付いてきた Python を利用しようとしたら、python.exe を指定したところで、エラーがでた。素直に 32bit にすれば問題ないのだろうが、生憎この PC は、64bit で地獄を見るためのものなので、狙い通りなのだ!

結局 IDLE は、便利なテキストエディタとして使うことにした。

では、再び気を取り直して。
マクロを格納する場所を確認する。Vista 64bit の場合は、以下に格納する。
python ディレクトリは、なかったので作成した。
<ユーザホーム>\AppData\Roaming\OpenOffice.org\3\user\Scripts\python

上記の場所に、helloWorld.py というファイル名で以下の内容を作成する。

#!
# -*- coding: utf_8 -*-

import uno

def helloWorld():
    desktop = XSCRIPTCONTEXT.getDesktop()
    frame = desktop.getCurrentFrame()
    win = frame.getContainerWindow()
    toolkit = win.getToolkit()
    rect = uno.createUnoStruct("com.sun.star.awt.Rectangle")
    title = "title"
    msg = u"メッセージ"
    msgbox = toolkit.createMessageBox(win, rect, "messbox", 1, title, msg)
    msgbox.execute()

g_exportedScripts = helloWorld,

ながい・・・もっとスマートな HelloWorld はないものか・・・
最後の g_exportedScripts は、マクロ実行画面で表示する関数を定義している。この定義をしなかった場合は、ファイル中の全ての関数がリストされる。ちなみに、行の最後のカンマは、タプル値として代入するために必要。

ファイルを作成したら、OpenOffice.org Calc (Base でも Writer でもなんでもいい)を起動して、「ツール」メニュー > 「マクロ」 > 「マクロを実行」を選択。
マクロの選択ダイアログが表示される。
ライブラリの中から、「マイマクロ」 > 「helloWorld」を選択すると、マクロ名に「helloWorld」が表示されるので、選択して「実行」ボタンを押す。
画面にメッセージダイアログが表示されれば成功。