Top > OOoPython > Start

Pythonとは Edit

Python(パイソン)は数ある'フリー'のスクリプト言語の中でも 最もおぼえ易い部類に入る入門者に適した言語です。

また、わかりにくいオブジェクト指向言語のうちで、 比較的分り易い部類に入る言語でもあるので、 これを学んでおくと、javaなどを学ぶのが楽に なるかもしれません。

もっともmacroを書くにあたって、オブジェクト指向を 意識することは少ないかもしれないのですが...。

(注意) この文書の中で、Pythonのコードは正しく表示されていません。 整形済テキストとして表示されている部分は 字下げをうけた部分です。 取りあえず読めるのでそのままに...。 文書の"編集"を選ぶと正確なコードが分ります。

Pythonをどう学ぶか Edit

教科書を買う必要はほぼないといってよいでしょう。 python.orgにあるtutorial(200ページ以上はありそう) を読めば立派なPython使いです。

おおよそ言語はなにかしら妙なところをもっているものです。 例をあげると、

for one_of_names in ["takahashi","sato","suzuki"]:
    print one_of_names

のようにfor文の使い方が独特。

def aaa():
    pass

何もしない関数を定義するときには、passという何もしないという 命令を使う。

などいろいろなものがあります。

マクロの実際 Edit

ここからはマクロの使い方を説明します。

まず1つサンプルのプログラムを見て下さい。

import sys

def ccc():
    try:
        document = XSCRIPTCONTEXT.getDocument()
        sheets = document.Sheets
        print sheets.hasByName("表1")
        sheet = sheets.getByName("表1")
        sheetnames = sheets.getElementNames()
        return None
    except:
        print "Unexpected error:", sys.exc_info()[0]
        return None

これは、star basic のマニュアルにある、hasByName()と、getByName()と、 getElementNames()の 使い方をあらわしたサンプルを、Pythonで 書いたものです。

basicとの大きな違いは、

1) import文:

例えば大きいプログラムを書くとき、 aaa とか、bbbとかのプログラム名を使うと、 それらが2回以上でてきたとき、 1回目の定義が上書きされて困ることがあります。

pythonでは、import文を使って この種の混乱をさけます。

例えば、one.py というファイルの中のaaa() という関数を、the_other.pyというファイルの中のaaa()という 関数の中で使うとします。

このときには、 the_other.py のaaaという関数の前で、 import the_other とかきます。

全体では、one.pyは、

import the_other

def aaa():
    the_other.aaa()

となります。このようにして、aaa()がたくさん定義してあっても、 混乱をさけることが出来ます。(もちろん人間は混乱するかも しれませんが...)

ここでいう、sysというのはOOoに附属して来るpythonのコードです。 sys.pyという名前で保存されているはずです。 実はメモ帳で開くと、人間の目で読むことも出来ます。 ただし、sys.pycというコードは読めないので注意して下さい。

2)

try: except: 文

現在のpythonマクロは、ある種のエラーが発生したときOOoごとクラッシュ させることがあります。 これを書いておくととりあえずクラッシュはしません。 (この文自体はpython tutorialから書き写してきたものです。) ただし、これを行なうと開発者がデバッグのために残してくれた 情報までも捨ててしまうことになるので、 あえて外すのも手です。 クラッシュしてももう一度OOoを起動するだけなので さほど手間ではないです。(Linux(fedora core 3)での話です。 ものによってはosごとクラッシュしかねないので注意が必要です。)

3)

注意: この部分はオブジェクト指向の用語を多く用いています。

XSCRIPTCONTEXT

これはglobal変数で、開発者がマクロ書きのために低レベルのコードから 持ちだしてきたものです。このなかには、稼働中のOOoの情報が詰まっています。 この変数はpythonscript.py中にあるpythonscript クラスのインスタンスです。 pythonscript.pyは、<OOoHome>/program/pythonscript.pyというように 保存されています。そんなに長くないです。 pythonscript クラスは、3つのメソッドを持っています。 このうちでとりあえずよく使いそうなのが、ここであげた getDocument()

です。 (他にはgetDesktop()ともうひとつ用途がよく分らない関数があります。) これは、現在アクティブになっているドキュメントを取得するようです。

サンプルではカルクが立ち上げてあることを想定しています。 (深い意味は無いです。manualがそうなっていたので...) そのため、writer などが立ち上がった状態でマクロを動かすと、たぶん エラーが返ってきます。

4) print文

pythonでは、msgboxという命令は今のところ存在しません。 print文は、OOoの機能ではなく、OOoに含まれたpython-coreの 命令です。msgboxはOOoの大きなファイル群のうちのどこかで、定義された 命令です。

実際には、basicのmsgbox文は非常に高級です。 例えばwindowを1つ書くにしろ、c等で書くなら、 場所はここで、形は四角で、タイトルはこれで、 書き込む内容はこれで、書き込む内容を書き込む場所はここで、 そのあとwindowを 表示して、 などいろいろな作業をこなさなくてはなりません。 通例では、複雑な命令は、prefixをつけて、 例えば sun.com.star.graphics.beatiful.wonderful.msgbox() のように長い名前がつきます。 Basicでは、その一部をとって使っているものと思われます。 まだどこに保存されているのか筆者は見つけていません。

プログラム全体の内容としては、 シートをOOo本体から受け取って、その中に"表1"という名前のシートがあれば そのことを表示して、("表1"があれば、Trueが表示されます。) 次に"表1"というシートを取得して(何もしないのですが...) 最後にシートの名前が入ったリストを取得します。 リストはパイソンの組込み型の1つです。 例えば、

print sheetnames

を書き加えると、

(u'\u88681', u'\u88682', u'\u88683')

という答が返ってきます。ここでいう\u8868 はおそらく'表'という 文字をあらわすユニコードです。最後の1,2,3の文字は 表1,表2,表3の1,2,3です。 結局開いてある表の名前が分ったわけです。 だからどうしたという感じですが...。

pythonマクロの今後 Edit

pythonOOoマクロはいきなりOOoをクラッシュさせるなど、 まだ不安定なところがあり、覚えても役立たないと思うかも 知れません。

しかし、python自身は既にオープンソース界で確固たる地位を 築いております。もし、これからプログラミングを始めるとしたら 最初はBasic言語をやるとしても2つめ、3つ目の言語として これをおぼえるのも面白いかと思っています。

java_to_python

参考文献 Edit

日本pythonユーザー会

http://www.python.jp/Zope/

python_OOo_macro開発者のページ

http://udk.openoffice.org/python/python-bridge.html

python_tutorial_日本語版

http://www.python.jp/pub/doc_jp/tut/

firstly written: Mar/11/2005 by T.Uesugi


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