このページの内容は、LibreOffice Wiki 「PDesigning & Developing Python Applications」 の和訳です。。
翻訳時の翻訳元のページの最終更新日時は 2021-10-13 19:11:11 です。
また、部分的に翻訳されている日本語 Wikiページ「マクロ/Python設計ガイド」も存在します
序文
Introduction
このページは、LibreOfficeアプリケーションの設計や共同作業を希望するPythonマクロ開発者を対象としています。初心者から経験豊富なPythonコーダーまで、このページの開発ガイドラインから恩恵を得られるかもしれません。LibreOffice内のPythonを見つけるために、Pythonプログラマーズ・ガイド(英語ページ「Macros/Python Guide」)から始めてください。
LibreOfficeプロジェクトに参加したい方は、こちらのWiki「参加しよう」を参照してください。
このページは、あなたが、LibreOfficeアプリケーション・スイートをある程度使い慣れてるのと同じように、Pythonに相応に向き合っていると仮定しています。簡単に説明されたLibreOffice拡張機能の使用法と同じように、いくつかのPythonコード・サンプルが含まれています。
ドキュメント
Documentation
- もちろん、Python.org
- 「難しい方法でPythonを学ぶ」、しかし、言うほど難しくない。
- Python-Apache OpenOffice
- 実際のPythonチュートリアル、Pythonプログラミング[Wikibooks]
- 驚くほど機能的なPython
オンライン講座や手引き
online courses or guides
電子文献
e-Bibliography
- The Hitchhiker's Guide to Python!, Kenneth Reitz, April 2018
- Object-Oriented Programming in Python, Nov. 2017 (PDF版)
- Learning Programming with Python 3 - The Coder's Apprentice, Oct. 2017 (PDF版)
- OpenOffice.org 3.1 Developer's Guide, オンライン版, 例, 2009
- StarOffice (Basic) Programmer's Tutorial, May 2000
- Java LibreOffice Programming, Andrew Davison, March 2017
統一モデリング言語(UML)
Unified Modeling Language (UML)
多数のUML駆動型ツールが、利用できます。注目の言語に言及した、無料のオープンソースの相互運用可能なアプリケーションに焦点を当てた勝手なリストを紹介します。
- ArgoUML :ArgoUMLは、どんなJavaプラットホーム上でも動作し、10の言語(アメリカ英語、イギリス英語、フランス語、ドイツ語、イタリア語、ポルトガル語、スペイン語、ロシア語、ノルウェーの文語と中国語)で利用できます。
- StarUML :StarUMLは、macOS 10.6以上、Windows XP以上、Ubuntu (64、あるいは、32bit)向けに提供されています。StarUMLは、豊富な機能を備えていますが、英語版のみ提供されています。
- Umbrello :多言語対応のUmbrelloは、GNU / Linuxディストリビューション、Windows(64、あるいは、32bit)、およびmacOSに対応しています。
統一モデリング言語(UML)ツールの広範囲なリストは、Wikipediaから利用できます。
StarOfficeプログラマーのチュートリアルでは、UML図を使用してLibreOffice文書について詳しく説明しています。
ソフトウェアのデザイン・パターンは、Wikipediaで説明されており、Pythonの例が付随している場合もあります。
序文
Preamble
LibreOfficeのBasic言語のマクロ開発には、Basicマクロが、編集、デバッグなどができる統合開発環境(IDE)が付属しています。Pythonマクロを作成するには、あなたが選択したIDEを構築するための追加の構築段階が必要です。その見返りとして、あなたは、Pythonの開発の好みや習慣に基づいて構築された柔軟な設計経験が提供されます。以下に、初心者から上級ユーザーのためのIDEの設定の案内があります。
Basicと同等のライブラリとマクロの取り扱いは、Pythonでは使用できません。しかしながら、Pythonの伝統的なモジュールと関数を管理することは、確かにできます。一方、Pythonパッケージの構築は、どうにかして、部分的に、LibreOffice拡張機能やUNOパッケージを作成するために変換されます。このページは、同じ意味で、マクロのためのライブラリと関数のためにモジュールを使用します。Pythonの用語は、Pythonの文化的な使用法にうまく対応するために、好まれる場合があります。
LibreOfficeのスクリプトには、personal、shared、あるいは、文書に埋め込むことができる3つの異なる特色があります。それらの種類と依存するプラットホームに応じて、それらは、AOO wikiの「マクロ言語としてのPython」の記事で説明されている、さまざまな場所に保存されることになります。
Pythonスクリプトを管理するには、Windowsライブラリを使用するか、GNU/Linuxファイルマネージャのショートカットを使用します。このように、.pyファイルは、カジュアルなドラッグ&ドロップを使用して整理できます。あなたのライブラリやファイル・マネージャのショートカットの設定を助けるためのあなたの環境に応じたフォルダの場所の説明は、AOOのwiki記事「マクロ言語としてのPython」で見つけることができます。
図で示すように、Pythonプロジェクトは、以降のWindowsライブラリのIDEごとに配置できます。
必須のAlternative Python Script Organizer拡張機能(ASPO)は、Pythonスクリプト管理に影響を及ぼします。あなたは、LibreOfficeをインストールすることで、Pythonスクリプトをより強力に統合できます。一旦、LibreOfficeが再開されると、マクロのツール・メニューを確認します。-Pythonスクリプト・サブメニューを整理します。
この拡張機能は、Pythonスクリプトを管理するためのさまざまな動作を提案します。実行ボタンは、選択したマクロを実行します。Menuボタンから入手可能な動作は、選択した要素に依存します。:
- あなたが、personal、shared、文書コンテナを選択するたびに、マクロやライブラリを作成します。
- マクロやライブラリを編集、名前の変更、削除
- 個人用や共有コンテナから文書にマクロを埋め込む
- 文書に埋め込まれたライブラリを、プラットフォームのPythonモジュールに置き換えます。
- 文書に埋め込まれたライブラリをPythonモジュールとしてエクスポートします。
- 選択されたマクロをデバッグする
- Pythonインタプリタとしても知られるPythonインタラクティブ・コンソールを実行する
スクリプトの編成とPythonパッケージに関連するその他の情報は、デバッグで見つけることができます。
LibreOfficeのスクリプトは、LibreOfficeアプリケーション・スイートでスクリプトを、どのように使用するかを詳しく説明します。
開発する
Developing
多くのアプリケーションは、元のまま、あるいは、特別化してPythonを利用しています。LibreOfficeには、Universal Network Objects (UNO)を通じて、APIを使用できる独自のPythonインタープリタが組み込まれています。Python言語は、独自のインタプリタを持っており、LibreOfficeと並行して使用できます。どちらも共通の基盤を共有し、拡張可能であり、同じ機能を提供するだけでなく、異なる機能も提供します。ネイティブのPythonには、LibreOffice APIへのUNOインターフェイスが含まれていません。逆に、LibreOfficeは、ネイティブPythonとしては、完全には、動作せず、ネイティブPythonとして、まったく同じように、機能を拡張するわけではありません。しかしながら、LibreOfficeも、ネイティブPythonも、Writer、Calc、Impress、Draw、Base、Math用のPython言語で、アプリケーションの開発を容易にしません。
LibreOfficeは、32や64bit版が存在します。付随する統合開発環境(IDE)は、32、あるいは、64bitの両方は、同じコンテキストで実行する必要があります。IDLEのような最も簡単なものから、議論の余地はありますが、より精巧なPyCharmやEclipseのためのPyDevのようなものまで、多数のIDEが存在します。
次のリストは、無料のオープンソース、マルチプラットフォーム、場合によってはマルチ言語のツールを、思いつくままに焦点を当てています。以下のデバッグの章では、説明のためだけにPyzoとPyCharmを使用しています。PythonのためのIDEのリストは、Python.orgサイトから入手できます。多数の言語の統合開発環境の比較(IDE)は、Wikipediaから入手できます。
- 統合開発、および学習環境(IDLE)は、32と64bitをサポートしています。それは、多くのプラットフォームで利用できます。IDLEは、Pythonを学ぶための推奨ツールです。
- Geanyは、32や64bitで動作します。そして、43の異なる言語で利用できます。GNU / Linux、* BSD、macOS、AIX v5.3、Solaris Express、Windowsで動作します。Geanyは、軽量で、小さなプロジェクトに適合し、LibreOffice Pythonインタプリタをサポートしています。
- Liclipse
- Aptanaを使用したデバッグは可能なようです。 このスレッドを参照してください。
- PyCharm(無料版)は、Gnu / Linux、macOS、Windowsプラットフォームをサポートしています。32bitとして利用でき、64bitにも対応しているようです。Python開発に伴う多数の機能に加えて、PyCharmは、LibreOfficeと互換性のあるPythonデバッガーを持っています。
- Pyzoは、Linux、OS X、Windowsで、10の異なる言語で利用できます。32bitや64bitの複数のPythonインタプリタを構成できます。Pyzoは、デバッギング機能を提供します。
これらのIDEから利用できる機能のリストを次に示します。LibreOfficeBasicIDEは、それらの一部を提供していません。
ソース・エクスプローラ、構文の強調表示
IDLE、Geany、PyCharm内でのソース探索と構文の強調表示により、スクリプトの編集が容易になります。GeanyとPyCharmは、コードの折り畳みをサポートしています。IDLEクラス・ブラウザは、内部、あるいは、埋め込みクラスをサポートしていません。
コード補完
Code completion
コード補完は、IDLE、Geany、PyCharmでのPythonスクリプトの編集を支援します。
デバッグ
Debugging
以下のデバッグの章では、このテーマについて詳しく説明します。
コーディング・ガイドライン(PEP)
Coding guidelines (PEP)
PyCharm IDEは、Python拡張の提案(PEP)コンプライアンス・チェックを表示します。
Pythonのコーディング規則と推奨事項は、エディターの右端にあります。これは、経験の浅いプログラマーにとって特に便利です。
テスト駆動開発(TDD)-草案
Test-Driven Development (TDD) - draft
</Unit testing>
バージョン管理
Version Control
下で図示するように、ソースコードのローカル履歴には、PyCharmが付属しています。:
apso.py Pythonモジュールの2つのコピーが一緒に表示され、それぞれv0.8.3とv0.8.7のラベルが付いています。バージョンの違いは、正確に強調表示されます。
PyCharmは、Git、GitHub、Mercurial、Perforce、Subversionなどの他のバージョン管理ソリューション(VCS)をサポートしています。
デバッグ
Debugging
LibreOfficeの内部
Within LibreOffice
Alternative Python Script Organizer拡張機能を使用して、LibreOffice内で、Pythonマクロを直接編集およびデバッグできます。LibreOfficeを離れることなく、ライブラリとモジュールを管理したり、好みのエディタを選択したりすることができます。
LibreOfficeからの開発も同様に実行可能であるため、デバッグが可能になります。統合開発環境(IDE)を使用したリモートコーディングとテストにより、この後詳述されるより多くの特徴を持っています。
ここに、これらの2つのコンテキストで、恩恵を受けるために、プログラマーのための3つの拡張機能があります。LibreOffice Basic、Python、JavaScript、BeanShellなど、プログラミング言語に関係なく使用できます。3つすべてが、LibreOfficeスイートからAPIのイントロスペクションを拡張します。
役に立つ拡張
Useful Extensions
設計時に、UNOオブジェクトが、実際にサポートするサービスが、常に明確であるとは限りません。しかしながら、開発者が、どんなUNOオブジェクトでも、検査するのに役立つ拡張機能が存在しますが、MRIを除いて、拡張機能のカタログからは利用できません。それらは、LibreOfficeのAPIリフレクション機能に基づいて構築されています。
- X-Rayは、LibreOfficeのAPIオブジェクトを検査します。オブジェクト変数によって提供されるプロパティ、メソッド、サービス、インターフェイスが表示されます。X-Rayは、フランス語、英語、ドイツ語、スペイン語、チェコ語、ポーランド語、ロシア語で利用できます。X-Rayは、Basicで記述されています。
- MRI(My Reflection and Introspection)は、Pythonで記述されたUNOオブジェクトのイントロスペクションツールです。その機能は、X-Rayの機能と似ています。MRIは、英語だけで利用できます。注:拡張機能のカタログMRIコピーは古くなっています。
- Object Inspectorオブジェクト・インスペクタ拡張機能は、すべてのサポートされたサービス、エクスポートされたインターフェイス、およびTreeViewウィンドウ内のそれぞれのメソッドとプロパティのような、UNOオブジェクトの全機能を表示します。オブジェクト・インスペクタは、Javaで記述され、英語だけで利用できます。
- APSOAlternate Python Script Organizer 拡張機能は、オブジェクト・インスペクタをデバッガーにうまく統合します。X-RayまたはMRIのいずれかを使用します。
Pythonマクロの使用
Usage of Python macros
LibreOfficeのPythonマクロは、さまざまな場所に保存されており、「マクロ言語としてのPython」で説明されているように、さまざまな種類があります。スクリプトは、personal、shared、拡張機能への保存、パッケージへの統合、文書への埋め込みが可能です。この多様性は、さまざまな用途や制約を暗示します。
文書では、それぞれのモジュールは自律的であり、モジュールのインポートはありません。これを回避するために、オンライン/ローカル・ヘルプの「Pythonのインポート」を参照してください。
埋め込まれたPythonモジュールから、BasicやPython拡張機能を呼び出すことができます。
<user>\python\pythonpath内のPythonスクリプトは、埋め込みモジュール、または<user>\pythonスクリプトによってインポートできます。IDEからのBasicのサポートなし:X-Rayが存在しない
Basicの存在は、IDEで設置されたブリッジの種類に依存しています。
PythonとJavaは、IDEから呼び出されたときにサポートされます。:MRI、オブジェクト・インスペクタを使用することができます。
ここに、Pythonマクロで、Mriを、どのように使用するかがあります。:
import uno
def mri(target):
ctx = uno.getComponentContext()
mri = ctx.ServiceManager.createInstanceWithContext(
"mytools.Mri",ctx)
mri.inspect(target)
if __name__ == '__main__':
def Mri_test():
document = XSCRIPTCONTEXT.getDocument()
mri(document)
Mri_test()
X-Rayで、実行中のマクロを停止する:
import uno
from com.sun.star.uno import RuntimeException as _rtex
def xray(myObject):
try:
sm = uno.getComponentContext().ServiceManager
mspf = sm.createInstanceWithContext("com.sun.star.script.provider.MasterScriptProviderFactory", uno.getComponentContext())
scriptPro = mspf.createScriptProvider("")
xScript = scriptPro.getScript("vnd.sun.star.script:XrayTool._Main.Xray?language=Basic&location=application")
xScript.invoke((myObject,), (), ())
return
except:
raise _rtex("\nBasic library Xray is not installed", uno.getComponentContext())
# ___________ example of use _______________
def demoXray():
""" example : using xray in a Writer document """
xTextDoc = XSCRIPTCONTEXT.getDocument()
xText = xTextDoc.Text
xray(xText)
xray("Demo is finished")
g_exportedScripts = demoXray,
オブジェクト・インスペクタを使用して、UNOオブジェクトをツリービューに表示する:
import uno
def inspectObject( obj, title="Object Inspector" ):
ctx = uno.getComponentContext()
oi = ctx.ServiceManager.createInstanceWithContext("org.openoffice.InstanceInspector", ctx)
if oi is None: # i.e. InstanceInspector is not installed or deactivated
# すなわち、インスタンス・インスペクタが、インストール、あるいは、非アクティブ化されていません
return # exit silently
# 静かに終了します
oi.inspect( obj, title )
def exObjInspector():
doc = XSCRIPTCONTEXT.getDocument()
dsk = XSCRIPTCONTEXT.getDesktop()
inspectObject(doc)
inspectObject(dsk, title="StarDesktop")
IDEから、LibreOffice Pythonインタプリタを経由する
From an IDE via LibreOffice Python interpreter
IDE内でPythonマクロを開発するには、LibreOfficeインタプリタを使用する必要があります。ネイティブPythonには、UNOオブジェクトと互換性のないIDLEのインタプリタが付属しています。Python IDEを選択していると、プログラマーは、クラス・ブラウザ、構文の強調表示、コードの補間、コーディング標準の適用、テスト駆動開発、デバッグ、バージョン管理などの多くの機能を利用できます。
Geany、PyCharm、Pyzo用のLibreOffice Pythonインタプリタの設定は、「マクロ/Pythonの基礎」で説明されています。
<user>\python、あるいは、<user>\python\pythonpathからスクリプトを実行するには、IDEとLibreOfficeの間で、通信を確立する必要があります。このようなブリッジがないと、UNOオブジェクトに到達できません。一旦、通信が行われると、IDEとLibreOfficeは、連携して動作します。次のリンクは、そのプロセスを文書化しています。:
- XSCRIPTCONTEXTによるIDEの架け橋、2017年2月(フランス語)
- OpenOffice / LibreOfficeでのインターフェース指向プログラミング:Pythonマクロによるオフィスタスクを自動化、2015年12月
- PyCharmによるLibreOfficeのマクロ作成(環境設定)2013年9月(日本語)
- Pythonを使用したOpenOfficeの開始、停止、および接続、2008年12月
- Python UNOブリッジ、2008年10月
IDE_utilsモジュールは、これらのリソースを借りて、LibreOfficeのIDE用のPythonマクロの単純な有効化を提供します。
Pythonスクリプトの使用法
Usage of Python scripts
- … Pythonパッケージと呼ばれています …
Geanyによる外部実行
External Execution with Geany
Geanyは、LibreOffice内で、ウィンドウを開き始めます。GeanyのEDIは、SDKで定義された..awt.createMessageBoxAPIメソッドを利用するinfo()関数を呼び出します。ユーザー・スクリプトには、SysInfo.pyという名前が付いています。
PyZoによるデバッグ
Debugging with PyZo
PyUNOのWorkspaceは、PyUNOとLibreOffice UNO APIのためのオブジェクトのイントロスペクションPyzo IDEプラグインです:
Pyzoは、実行され、
APSOによるデバッグ
Debugging with APSO
Alternative Python Script Organizer拡張機能は、xRayやMRIによるスタックトレース表示とUNOオブジェクトのイントロスペクションと同じように、段階的に実行できます。
コンソールへの出力
Output to Consoles
Pythonスクリプトは、PythonシェルとそのRead Execute Print Loop(REPL)プロセスを使用して、プロトタイプ化できます。Alternative Python Script Organizerは、LibreOffice Pythonの一部であるこの機能を統合します。
Pythonインタラクティブ・コンソール
Python Interactive Console
PythonインタプリタやPythonシェルとも呼ばれるPythonインタラクティブ・コンソールは、プログラマーに、コマンドを素早く実行し、ファイルを作成せずに、コードを試してテストする方法を提供します。LibreOfficeDev Pythonモジュール文書と同じように、UNOオブジェクトのイントロスペクションは、ターミナルから取得できます。オンライン/ローカルのLibreOfficeでは、Pythonインタラクティブ・コンソールを、どのように実行するかについて詳しく説明しています。
Windowsのコンソール
Console on Windows
デフォルトでは、Windowsには、デフォルトのstdoutはありません。関数 "print" によって送信されたものは、どこにも表示されません。コンソールをstdoutとして使用するには:
- soffice.exeの代わりにsoffice.comを使用してLibreOfficeを起動します。:
LibreOfficeが閉じるまで、Pythonスクリプトのprint()ステートメントは、コンソールに表示されます。コンソールが、存在しなければ、print()ステートメントは、何もしません。
ソース:Windows上のLibreOfficeの適切なコンソールモード
これは、LibreOfficeリリース 6.3から利用できます。このリリースの前では、次の手順に従ってください。:
- LibreOfficeを閉じます。
- Visual Studio Express 2010 C++を、ダウンロードする。(私は、それが、他のバージョンでも動作する可能性があると思います)そして、それをインストールします。
- Visual Studioのためのコンソールを開きます。
- 次の内容を力する:
editbin.exe /subsystem:console "C:\Program Files\LibreOffice 5\program\soffice.exe"
editbin.exe /subsystem:console "C:\Program Files\LibreOffice 5\program\soffice.bin"
次に、あなたが、LibreOfficeを開くとき、コンソールが表示されます。それは、"print"コマンドのためのstdoutです。そして、あなたが、トレースバックを使用する場合、LOが実行されている間、Pythonエラーを取得する可能性があります。
import traceback
[…]
try:
[…]
except:
traceback.print_exc()
しかし、構文エラーは、まだ報告されません。
例外の処理-草案
Handling Exceptions - draft
例外の処理-草案
Handling Exceptions - draft
ダイアログの構築-草案
Building Dialogs - draft
UNODiT UNOダイアログ・ツールは、下にリストされている参考資料をいくつか紹介します。:
ダイアログを設計する
Designing Dialogs
- 詳細:..中間結果を表示する
イベント駆動マクロ
Event-Driven Macros
- UNODiT UNOダイアログ・ツール
- コンポーネントでダイアログを使用する。
- イベント・ヘルプページ
- Basic イベント駆動型マクロ、イベント、CreateUnoListener
- Writer オブジェクト・イベント
- グローバルControl、あるいは、Formイベント
- イベントAPIページ
- com.sun.star.documentイベント・サービス、DocumentEvent、XDocumentEventBroadcaster
- 詳細:自動スクリプトで、ToCを更新する、[Calc]イベント-リスナーとハンドラ、マクロの自動実行 .. マクロコードで、.. OnSaveイベントを監視するPythonスクリプト、2-ボタン・ダイアログのためにPythonで例を探す、Python...ListBoxのMouseClick、Pythonのダイアログ・ボックス、[Python] [UI]ウィンドウ/ウィジェットの更新、セルの内容が変更されたときにPythonマクロを実行する、HowTo ..CalcのためのPythonマクロ
ローカライゼーション
Localisation
ディスパッチャ・コマンド-草案
Dispatcher commands - draft
*Officeによるインターフェイス指向プログラミング、Christopher Bourez(2015)
拡張機能の作成-草案
Creating extensions - draft
拡張機能:
UNOコンポーネントのパッケージ化 - Pythonコンポーネントのテスト
ダイアログ・コントロールによって作成されたイベントを受け取る
サービスを構築する
Building a Service
Calcアドインを構築する
Building a Calc Add-In
- Calcのアドインの構築、Hubert Lambert、2016年11月(フランス語)
- 地理座標または地図作成座標の変換、pk1157&alter、2011年1月
構築と拡張
Building and Extension
その他-草案
Miscellaneous - draft
文書モジュールのインポート
Document module import
参考:オンラインヘルプでのPythonモジュールのインポート
Pythonパッケージ vs. LibreOffice拡張機能
Python package vs. LibreOffice Extension
(参考:これまでのフランス語の草案バージョン)
静的プロパティやメソッド
Static Properties or Methods
Q: Pythonのグローバル属性の動作は、どのようなものですか?
PyCharmで、Gitを使用する ― 草案 ―
Using Git with PyCharm - draft