「Web出版サイト」ベータ公開

Q&A集[?]

当サイトでのご質問の受付は終了しました

すべてのコンテンツを読み込み専用としたため、回答欄からも投稿できません

Apache OpenOffice/LibreOfficeのご質問はそれぞれのフォーラムへご投稿ください

質問コーナー

サイト内検索

分類メニュー

関連サイト


本日:1
昨日:0
総数:4110
現在:1


Pythonマクロ作成環境について

ページOpenOffice.org FAQの登録ページ
投稿者new_OOo3
分類
edit/refer
優先順位
edit/refer
状態
edit/refer
カテゴリー
edit/refer
投稿日2010-07-29 23:36:11 (木)
OSWindowsXP SP3
依存するページ
バージョン
edit/refer

メッセージ

回答ページでは行末に「~」を付加する必要はありません

お世話になっております。
この度、Pythonマクロにchallangeするべく下記手順にてeclipseを用いたマクロ開発環境の作成を試みました。

1) eclipse3.6 のDLとInstall
DL元URL : http://download.eclipse.org/eclipse/downloads/drops/R-3.6-201006080911/winPlatform.php#EclipseSDK
DL file : eclipse-SDK-3.6-win32.zip

2) pydev pluninの追加
eclipseの
「help」=>「Install new software」
にて
http://pydev.sourceforge.net/updates/
をadd

3)Pythonの追加
eclipseの
「help」=>「Install new software」
にて
http://www.python.org/download/
をadd

4)OpenOffice.orgSDKのDL、Install
DL元 : http://download.openoffice.org/other.html#tested-sdk
DL File : OOo-SDK_3.2.1_Win_x86_install_en-US.exe

5)OpenOffice.orgSDK Plugin追加
eclipseの
「help」=>「Install new software」
にて
URL : http://cedric.bosdonnat.free.fr/ooeclipseintegration
をadd

その後、eclipseのWorkSpaceを
C:\Documents and Settings\user名\Application Data\OpenOffice.org\3\user\Scripts\python
に設定。

更にWindowsのPathに
C:\Program Files\OpenOffice.org 3\URE\bin
C:\Program Files\OpenOffice.org 3\Basis\program
を追加。

その後PCを再起動してeclipseを起動させて、「unopy.py」を確認しましたところ下図の様に
from com.sun.star.script.provider import XScriptContext
がErrorとなりました。
Error内容は「XScriptContextがimport出来ない」との旨がProblems欄に表示されていますが、netで調べましたが、解決方法が見つかりませんでした。

eclipse01.png

つきましては、下記項目についてご教示頂けます様お願いします。

1)eclipseを用いたPythonマクロの作成環境の手順に間違いがあればご指摘願います。
2))import errorの修正方法をご教示頂けます様お願いします。
3)eclipse以外で容易にpythonマクロのdegugが出来るIDE作成方法があれば教えて下さい。

宜しくご回答を頂けます様お願いします。


1-3 について

はにゃ? (2010-07-30 02:26:25 (金))

1) 環境変数は実行時に設定されるように Run - Run Configurations で Python Run に新しい項目を作成、Environment のタブで指定するといいと思います。
URE_BOOTSTRAP も設定しないとエラーが出るはずです。
uno.py や unohelper.py がある場所を Project - Properties の PyDev - PYTHONPATH にある External Libraries で指定してもかまいません。

2) 表示されているエラーは実行前から出ているものだと思います。
実行前のインポートエラーは PYTHONPATH からモジュールを検索して見つからなければエラーになります。
しかし、この場合のように UNO の型をインポートしている場合、uno.py で変更された import ステートメントでなければ動作しません。値の取得は pyuno.pyd (pyuno.so) 内で行われます。
実行前に IDE が表示しているこのエラーは修正方法がありません。Java でのように全ての UNO 型をクラスとして定義しているのとは違い、定義せずに動的に生成する方法をとったバインディングなので仕方ありません。

3) http://wiki.python.org/moin/PythonEditors の Python モードのあるエディタ一覧でに IDE も混じっています。たとえば、次のようなものもあります。
Eric
http://eric-ide.python-projects.org/index.html
PyScripter
http://code.google.com/p/pyscripter/
Netbeans IDE + Python プラグイン

ご回答ありがとうざいました。

new_OOo3 (2010-07-30 23:27:56 (金))

はにゃ? 様

お世話になっております。
ご回答頂いた内容と下記URLを元にPythonマクロの作成が出来ました。
[ 参考URL ]
URL1 : http://d.hatena.ne.jp/hanya_orz/20100606/p1
URL2 : http://absolutearea.blogspot.com/2010/01/openofficeorg-base-python-1.html

しかし、下記sample codeにおいて、どちらもOOoからは問題無く実行出来ますが、sample code2の方はeclipse上でRunするとError Messageが表示されます。

************ sample code 1*******************
#!~
# -*- 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 = "Hello World in Python!!"
   msgbox = toolkit.createMessageBox(win, rect, "messbox", 1, title, msg)
   msgbox.execute()
~
g_exportedScripts = helloWorld,~
~
****************************************


************ sample code 2**************
# python Marco~
from com.sun.star.awt import Rectangle~
~
def omsgbox(message):~
#	"""shows message."""~
		desktop = XSCRIPTCONTEXT.getDesktop()
		frame = desktop.getCurrentFrame()
		window = frame.getContainerWindow()
		toolkit = window.getToolkit()
		msgbox = toolkit.createMessageBox(window, Rectangle(), 'messbox', 1, 'Title', message)
		return msgbox.execute()
def oHello():~
	try:
		otext='Hello World in Python!!'
		omsgbox(otext)
	except:
		pass
****************************************


Error message 無し(sample code 1)

eclipse02a.png


OOoから実行した結果

eclipse02b.png


Error message 有り(sample code 2)

eclipse03a.png


OOoから実行した結果

eclipse03b.png


つきましては、OOoとは関係無いeclipseの問題かも知れませんが出来れば、eclipseをPythonマクロのdeguggerとして使いたいと考えておりますので、お知恵を拝借させて頂けます様お願いします。

sample code 2 について

はにゃ? (2010-07-31 01:49:49 (土))

sample code 2 を Eclipse 上から実行するとき、uno.py を先に import していないためにエラーが出ているようです。
前述にもありますが、uno.py を import するとデフォルトの import ステートメントが uno._uno_import 関数で置き換えられます。この関数は pyuno モジュールから UNO の型を取得します。__builtin__ から置き換えるためその Python のインスタンス全体に影響します。というわけで、一度でもその Python のインスタンス実行時にどこかのモジュールで uno.py が import された場合、UNO の型をインポートできるようになります。

OOo のマクロとして Python のスクリプトを実行するときについてですが。
OOo は OOo のインスタンス一つ当たり Python のインスタンスを内部で一つしか持っていません。Python のスクリプトを実行しようとするとき次のような順序で Python のインスタンスが作成されます。同じコンテキストに対するその言語用のスクリプトプロバイダは再利用されるので初回の動作です。

  1. Python 用のスクリプトプロバイダ css.script.provider.ScriptProviderForPython サービスがタイプデータベースから検索される。
  2. 普通このサービスとして登録されている実装名 org.openoffice.pyuno.LanguageScriptProviderForPython のコンポーネントがあります。このコンポーネントのローダーは com.sun.star.loader.PythonLoader です。
  3. 先にローダーがインスタンス化されます。Python のローダーは二つの部分に分かれています。C++ で書かれた部分と Python で書かれた部分 (pythonloader.py) です。
  4. C++ で書かれたローダーのインスタンスが作成されると内部で Python のインスタンスが作成されます。
  5. 続いて pythonloader.py をインポートします。このモジュールでは uno モジュールをインポートしています。
  6. ローダーが Python のスクリプトプロバイダをインスタンス化します。
  7. 要求に応じてスクリプトを読み込み、実行します。

    というわけで、Python のローダーで読み込まれるような Python で書かれた UNO コンポーネントを実装したモジュールや Python で書いたスクリプトを OOo から実行するときには既に import ステートメントが置き換わっています。

    sample code 1 の様に uno.create... から取得するようにすればインポート時にはエラーは出ません。が、uno モジュールをインポートする必要になるため特に変わりはありません。

ありがとうございます。

new_OOo3 (2010-07-31 23:03:27 (土))

はにゃ? 様

お世話になっております。
的確なご指摘によってPythonマクロのDebug環境がつくれました。
本当にありがとうございます。

お名前:
題名:


添付ファイル: fileeclipse03b.png 1090件 [詳細] fileeclipse03a.png 1112件 [詳細] fileeclipse02b.png 1097件 [詳細] fileeclipse02a.png 1101件 [詳細] fileeclipse01.png 1099件 [詳細]