数年ぶりに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マクロが使えない状態で、何度か調べているのですが、今回のような情報は見つかりませんでした。
時間さえかければ、テキスト処理はこれで何でもできそうです。
この記事が気に入ったらサポートをしてみませんか?