« * 法務省:性犯罪に関する刑事法検討会 第3回会議(令和2年7月9日)後藤貞人氏提出資料 刑事弁護人の立場から見た各論点への懸念 (後藤貞人弁護士) | トップページ | * 読み終えた「山中温泉殺人事件」の金沢地方裁判所一審死刑判決と,最高裁の破棄差し戻し(名古屋高裁)判決 »

2020年7月24日 (金)

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

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

:CATEGORIES: パソコン

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

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

 しかし,いくら調べてもカーソルのある行のテキストを読み込み,変数に入れる方法がわかりませんでした。すごく基本的な操作と思うだけに不思議ではあるのですが,Wordのマクロでもなかなか情報が見つからなかったという経験はあります。

|python|

!/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という関数の実行以外は,自動で生成されるコードになります。とても簡単だったのですが,あとで思わぬ不具合に気がつくことになります。

|vba|

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のファイルがほぼ同じように扱えています。

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

|

« * 法務省:性犯罪に関する刑事法検討会 第3回会議(令和2年7月9日)後藤貞人氏提出資料 刑事弁護人の立場から見た各論点への懸念 (後藤貞人弁護士) | トップページ | * 読み終えた「山中温泉殺人事件」の金沢地方裁判所一審死刑判決と,最高裁の破棄差し戻し(名古屋高裁)判決 »