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: # 「はい」でなければ終了returnkaisai_nengetsu.String = dt_now<略>
これを、「ツール」→「マクロ」→「マクロの管理」→「Python」でマクロを実行したときは問題ない。
しかし、これをフォームコントロールの「プッシュボタン」のイベントとして実行すると、
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 givenFile "C:\Program Files\LibreOffice\program\pythonscript.py", line 921, in invokeret = self.func( *args ))
というエラーになってしまうのである。
get_today 関数の引数は無しなのに、ボタンのマクロ設定には m_main.py$get_today (user, Python) と何やら渡されてるから?
0 positional arguments(引数はゼロ個(無し))なのに、but 1 was given(しかし、引数がひとつ渡された)ってことよね?
そう、すっかり忘れていたのである。
ボタンで呼ばれるマクロの関数は、*args という任意の数の引数を受け取れる可変長引数を指定しないといけないことを・・・
でも、思い出したでぇ~(笑)
というわけで、関数宣言部を、
def get_today(*args):
と直したらエラーは消えたのでありました。めでたし、めでたし。
コメントする