見出し画像

数年ぶりにLinux(Ubuntu)のLibreOfficeでpythonマクロが使えるようになった

 今回はGoogleの検索で比較的新しい情報がいくつか出て来て、使えるに間違いないと思ったのですが、情報が乏しい中、標準でUbuntuにインストールされているLibreOfficeではだめらしいとわかりました。

 DebパッケージからのLibreOfficeのインストールになります。

 上記のページを参考にメニューの日本語化ができましたが、見つけるのに時間がかかりました。Ubuntuの標準だと日本語化は出来ていますが、数年前にやったときは、方法が違っていたような記憶です。

 上記のAPSOという拡張機能をLibreOfficeにインストールすることでpythonが使えるようになりました。これは初めて見つけた方法になると思いますが、テストでは数年前と同じ「import uno」だけで動いていました。

 数年前にマクロとして使っていたpythonファイルも、そのまま実行が出来ました。

 Linuxの場合、
~/.config/libreoffice/4/user/Scripts/python
が、スクリプトファイルの置き場所です。

 システムのpythonのモジュールは呼び出しが出来なかったので、上記の置き場所にファイルを作成しました。

 上記のページで見つけた.pthファイルを作成する方法ですが、これは今回初めて知りました。数年前は違った方法でやっていましたが、よく覚えていません。通常は必要のない作業です。

import sys
import uno
import traceback
from com.sun.star.awt.MessageBoxType import MESSAGEBOX
import datetime
import pyperclip


def IsertTmeSartText( ):
    oDoc = XSCRIPTCONTEXT.getDocument()
    oText = oDoc.getText()
    #oSText = "[ Text Start ] " + "\n"
    #oEText = "\n" + "[ Text End ] "
    #oText.insertString(oText.getStart(), oSText , False)  #文頭
    #oText.insertString(oText.getEnd(), oEText, False)     #文末
    #oText.uno:GoToPrevPara
    #oText.uno:GoToNextPara
    
    #oText.uno:EndOfParaSel
    #oText.uno:Copy

    # create a cursor
    cursor = oText.createTextCursor()

    # insert the text into the document
    now = datetime.datetime.now()
    time = '〉〉〉:Linux LibreOffice: {0:%Y-%m-%d %H:%M:%S} 〉〉〉'.format(now)
    
    def cursor():
        return oDoc.getCurrentController().getSelection().getByIndex(0)

    oText.insertString(cursor(), time, 0 )
    
    
def IserTmeEndxt( ):
    oDoc = XSCRIPTCONTEXT.getDocument()
    oText = oDoc.getText()
    #oSText = "[ Text Start ] " + "\n"
    #oEText = "\n" + "[ Text End ] "
    #oText.insertString(oText.getStart(), oSText , False)  #文頭
    #oText.insertString(oText.getEnd(), oEText, False)     #文末
    #oText.uno:GoToPrevPara
    #oText.uno:GoToNextPara
    
    #oText.uno:EndOfParaSel
    #oText.uno:Copy

    # create a cursor
    cursor = oText.createTextCursor()

    # insert the text into the document
    now = datetime.datetime.now()
    time = '〈〈〈:Linux LibreOffice:{0:%Y-%m-%d %H:%M:%S} 〈〈〈'.format(now)
    
    def cursor():
        return oDoc.getCurrentController().getSelection().getByIndex(0)

    oText.insertString(cursor(), time, 0 )


def ClipboardText():
    oDoc = XSCRIPTCONTEXT.getDocument()
    oText = oDoc.getText() 
    cursor = oText.createTextCursor()
    def cursor():
        return oDoc.getCurrentController().getSelection().getByIndex(0)

    gtext = pyperclip.paste()
    txt = """
```
{t}
```
    """.format(t=gtext)
    
    oText.insertString(cursor(), txt, 0 )


 数年前のファイルに、関数を追加し、クリップボードを操作するモジュールを.pthファイル経由でimportしています。

 4,5年はLibreOfficeでpythonマクロが使えない状態で、何度か調べているのですが、今回のような情報は見つかりませんでした。

 時間さえかければ、テキスト処理はこれで何でもできそうです。

この記事が気に入ったらサポートをしてみませんか?