LibreOffice Pythonマクロ　サンプルプログラム（初級者向け）No.4

注意)
このページのマクロは、Libreofficeの「マクロの実行」で動作させます。

LibreOfficeでPythonマクロを実行するには、
UbuntuのLibreOffice(MS Office互換性あり)でPythonマクロを使用する方法（超初級者向け）
https://qiita.com/ty21ky/items/2c8b001363c8293198e2
を参照ください。

#####環境

　　Ubuntu Studio 17.10
　　LibreOffice6.0

#####Macroの杜　(Sample Macro)　・Python編

【 General No.1 】LibreOffice全てで動作する。
https://qiita.com/ty21ky/items/2d4245cb650e77f06f30

【 General No.2 】
http://openoffice3.web.fc2.com/Python_Macro_General_No2.html

【 General No.3 】最後の方にサンプルマクロを一部追加
http://openoffice3.web.fc2.com/OOoBasic_General3.html

【 General No.4 】
http://openoffice3.web.fc2.com/Python_Macro_General_No4.html

【 General No.5 】
http://openoffice3.web.fc2.com/Python_Macro_General_No5.html

【 General No.6 】LibreOffice全てで動作する。
https://qiita.com/ty21ky/items/d34792d5dd03ec1122ce

【 Calc( 表計算 ) 】
https://qiita.com/ty21ky/items/d489da25f7824b768abf

Macroの杜のマクロを一気に動作確認しようと思っていましたが、あまりに数が多い、いや種類が豊富なのとエラーが出る傾向がわかりましたので、少し小休止。気が向いたら再開します。

一番最後の方に一部サンプルマクロを追加しました。

一番エラーが出るのはメッセージボックスで90%以上エラーが出ます。
http://openoffice3.web.fc2.com/Python_Macro_General_No1.html#OOoGM0a
のマクロの中で説明していますが、LibreOffice 4.1 までとそれ以降では仕様が変更になったようです。
マクロの中で一部新しいコードになっているものもあります。
##変更内容
まだ、確認していないものもあるのですべてではありませんが、ほとんどがこの変更で動作するようになると思います。

#####メッセージボックス
１．from com.sun.star.awt import Rectangle　を
from com.sun.star.awt.MessageBoxType import MESSAGEBOX
に変更する。

２．（変数名が異なります）
msgbox = toolkit.createMessageBox(window, Rectangle(), oMsgType, oBtnType, oTitle, oMessage)
の場合は、
msgbox = toolkit.createMessageBox(window, MESSAGEBOX, oBtnType, oTitle, oMessage)
に変更する。

msgbox = toolkit.createMessageBox(window, Rectangle(), 'messbox', 1, 'Title', message)
の場合は、
msgbox = toolkit.createMessageBox(window, MESSAGEBOX, 1, 'Title', message)
に変更する。

#####マクロの実行でマクロ名が表示されない。
コードをコピペで貼り付けた場合、一部のマクロでマクロ名が表示されない場合があります。

これは、すべて？の場合、字下げ部分に半角スペースとTabが混在しています。
半角スペースとTabのどちらかの多い方に統一すれば表示されるようになります。
PythonではTabは原則使用しないほうが良いらしいです。
サンプルマクロに無かったですが、字下げの数が違っても駄目ですし、エラーがあっても表示されない場合があります。

#Pythonのバージョンの違い
コードの中に[ 2.7系 ]と[ 3.3系 ]と書かれたものがあります。

Python2とPython3では相当大幅な仕様変更があって互換性がないところがあるそうです。

最近のLibreOfficeバンドルのPythonはPython3なので[ 2.7系 ]のコードを実行しても、エラーが出るか、または実行した結果が間違っているかも知れません。（やっていないのでわかりません）

#その他
ほんの一部のコードで実行できるが動作（表示等）がおかしいものがありました。（私の環境だけかも知れません）
これは、コードがおかしいのかバグなのか調べていないのでわかりません（多分、私のレベルだと調べてもわからないと思います）

あと、動作はするが何をやっているかわからないものもあったような気がする。

###【 Following General No.3 】###

**********************【 Macro Code 】**********************
OpenOffice.org / LibreOffice

General

[ Copy / Paste ]
GOGCp-)[General]ClipboardにCopy

```python:copy.py
import uno

def CopyPaste():
    oDoc = XSCRIPTCONTEXT.getDocument()
    ctx = uno.getComponentContext()
    sm = ctx.ServiceManager
    oFrame = oDoc.CurrentController.Frame
    oDispatcher = sm.createInstanceWithContext("com.sun.star.frame.DispatchHelper", ctx)
    #Clipboard へ Copy
    oDispatcher.executeDispatch(oFrame, ".uno:Copy", "", 0, ())
```

GOGCp-)[General]ClipboardからPaste

```python:Paste.py
import uno

def CopyPaste():
    oDoc = XSCRIPTCONTEXT.getDocument()
    ctx = uno.getComponentContext()
    sm = ctx.ServiceManager
    oFrame = oDoc.CurrentController.Frame
    oDispatcher = sm.createInstanceWithContext("com.sun.star.frame.DispatchHelper", ctx)
    #Clipboard から Paste
    oDispatcher.executeDispatch(oFrame, ".uno:Paste", "", 0, ())
```

GOGCp-)[General]全て選択（これはマクロの杜にはありません）

```python:SelectAll.py
import uno

def SelectAll():
    oDoc = XSCRIPTCONTEXT.getDocument()
    ctx = uno.getComponentContext()
    sm = ctx.ServiceManager
    oFrame = oDoc.CurrentController.Frame
    oDispatcher = sm.createInstanceWithContext("com.sun.star.frame.DispatchHelper", ctx)
    #全て選択
    oDispatcher.executeDispatch(oFrame, ".uno:SelectAll", "", 0, ())
```