LibreOffice の Python マクロをフォームボタンで実行

LibreOffice の Python マクロを久しぶりに作っているので、「知っていたのに忘れてしまったこと」で小一時間ほど無駄にしてしまった(^^;

例えば以下のようなマクロを実行する時。

<略>
def get_today():
    '''
    今日の日付を取得して開催年月日にセット
    '''

    doc = XSCRIPTCONTEXT.getDocument()

    # シートを選択
    sheet = doc.getSheets().getByName('Main')

    # 今日の日付の取得(YYYY/MM/DD)
    dt_now = (datetime.datetime.now()).strftime('%Y/%m/%d')

    # 開催年月日のセルにセット
    # すでに日付が入っている時は更新するか確認する
    kaisai_nengetsu = sheet.getCellRangeByName('C3')

    if kaisai_nengetsu.String:
        msg_box = Bridge()
        res = msg_box.run_querydialog(title='開催年月日セット', message='すでに値がセットされています。\n上書きでセットしますか?')

        if res != 2:    # 「はい」でなければ終了
            return

    kaisai_nengetsu.String = dt_now
<略>

これを、「ツール」→「マクロ」→「マクロの管理」→「Python」でマクロを実行したときは問題ない。

20200612_libre1.jpg

しかし、これをフォームコントロールの「プッシュボタン」のイベントとして実行すると、

com.sun.star.uno.RuntimeException: Error during invoking function get_today in module file:///C:/Users/hoge/AppData/Roaming/LibreOffice/4/user/Scripts/python/m_main.py (<class 'TypeError'>: get_today() takes 0 positional arguments but 1 was given
  File "C:\Program Files\LibreOffice\program\pythonscript.py", line 921, in invoke
    ret = self.func( *args )
)

というエラーになってしまうのである。

20200612_libre2.jpg.jpg

get_today 関数の引数は無しなのに、ボタンのマクロ設定には m_main.py$get_today (user, Python) と何やら渡されてるから?
0 positional arguments(引数はゼロ個(無し))なのに、but 1 was given(しかし、引数がひとつ渡された)ってことよね?

そう、すっかり忘れていたのである。
ボタンで呼ばれるマクロの関数は、*args という任意の数の引数を受け取れる可変長引数を指定しないといけないことを・・・
でも、思い出したでぇ~(笑)

というわけで、関数宣言部を、

def get_today(*args):

と直したらエラーは消えたのでありました。めでたし、めでたし。

トラックバック(0)

このブログ記事を参照しているブログ一覧: LibreOffice の Python マクロをフォームボタンで実行

このブログ記事に対するトラックバックURL: https://blog.netandfield.com/mt/mt-tb.cgi/5631

コメントする

このブログ記事について

このページは、shinodaが2020年6月13日 00:19に書いたブログ記事です。

ひとつ前のブログ記事は「猫がいる家での仕事あるある」です。

次のブログ記事は「実はキング軒、初めてだった」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。


月別 アーカイブ

電気ウナギ的○○ mobile ver.

携帯版「電気ウナギ的○○」はこちら