* LibreOfficeのワープロWriterからのTwitter投稿と,pythonマクロ

:LOGBOOK:
CLOCK: [2020-07-24 金 09:56]
:END:

:CATEGORIES: パソコン

〉〉〉:Emacs: 2020-07-24(金曜日)09:56  〉〉〉

 昨日の午前中は,まずLibreOfficepythonスクリプトを実行できるようにしました。エラーが出るようになったまま放置していたのですが,モジュールの読み込み先を指定することなどで対処しました。

 しかし,いくら調べてもカーソルのある行のテキストを読み込み,変数に入れる方法がわかりませんでした。すごく基本的な操作と思うだけに不思議ではあるのですが,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を自分で終了させるまでは普通に使えているので,大きな問題はないと思います。ワープロソフトのLibreOfficeTwitterに投稿できるようになったのは大きいです。Windows10のWordのファイルがほぼ同じように扱えています。

〈〈〈:Linux Emacs: 2020-07-24(金曜日)10:28  〈〈〈