* LibreOfficeのワープロWriterからのTwitter投稿と,pythonマクロ
:LOGBOOK:
CLOCK: [2020-07-24 金 09:56]
:END:
:CATEGORIES: パソコン
〉〉〉:Emacs: 2020-07-24(金曜日)09:56 〉〉〉
昨日の午前中は,まずLibreOfficeでpythonスクリプトを実行できるようにしました。エラーが出るようになったまま放置していたのですが,モジュールの読み込み先を指定することなどで対処しました。
しかし,いくら調べてもカーソルのある行のテキストを読み込み,変数に入れる方法がわかりませんでした。すごく基本的な操作と思うだけに不思議ではあるのですが,Wordのマクロでもなかなか情報が見つからなかったという経験はあります。
#!/usr/bin/python # -*- coding: utf-8 -*- import sys sys.path.append('/...../anaconda3/envs/py_env/lib/python/site-packages') import twitter import uno import traceback from com.sun.star.awt.MessageBoxType import MESSAGEBOX import datetime 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 )
少し手を加えてましたが,上記が日付のテキストを挿入するpythonマクロになります。実際にカーソル位置に「〉〉〉:Linux LibreOffice: 2020-07-24 10:08:42 〉〉〉」と挿入されます。
前から少し思い出していたのですが,通常のLibreOfficeのマクロ,キーボードマクロでカーソル位置の行のテキストをクリップボードにコピーするコードを作成し,それにクリップボードの内容でツイートする外部コマンドを実行するものを使っていたようです。
これは次のコードになりますが,Shellという関数の実行以外は,自動で生成されるコードになります。とても簡単だったのですが,あとで思わぬ不具合に気がつくことになります。
REM ***** BASIC ***** sub TweetLine rem ---------------------------------------------------------------------- rem define variables dim document as object dim dispatcher as object rem ---------------------------------------------------------------------- rem get access to the document document = ThisComponent.CurrentController.Frame dispatcher = createUnoService("com.sun.star.frame.DispatchHelper") rem ---------------------------------------------------------------------- dispatcher.executeDispatch(document, ".uno:GoToEndOfLine", "", 0, Array()) rem ---------------------------------------------------------------------- dispatcher.executeDispatch(document, ".uno:StartOfLineSel", "", 0, Array()) rem ---------------------------------------------------------------------- dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array()) rem ---------------------------------------------------------------------- dispatcher.executeDispatch(document, ".uno:GoToEndOfLine", "", 0, Array()) Shell("/home/a66/shell_script/kk_clipboard_tweet.rb", 1, "", False) rem ---------------------------------------------------------------------- dispatcher.executeDispatch(document, ".uno:Save", "", 0, Array()) end sub
最初,普通にTwitterへの投稿が出来ていたのですが,別のファイルを開くとできなくなり,できなくなったのにあとで投稿されていることに気がついたのです。原因は,アプリの終了後に投稿処理が行われるということでした。
いろいろとやっているうちに,あらかじめLibreOfficeを立ち上げ,空白のページを開いた状態で,別のファイルを読み込めば,その読み込んだファイルからもマクロでTwitterに投稿できるということに気が付きました。一応問題解決ですが,そのあと終了時,LibreOfficeが異常終了します。
LibreOfficeを自分で終了させるまでは普通に使えているので,大きな問題はないと思います。ワープロソフトのLibreOfficeでTwitterに投稿できるようになったのは大きいです。Windows10のWordのファイルがほぼ同じように扱えています。