電気ウナギ的○○

About Home

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

shinoda (2020年6月13日 00:19)
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):

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

電気ウナギ的○○

電気ウナギ的○○

About Back

コメント(0)

電気ウナギ的○○

電気ウナギ的○○

About Back

トラックバック(0)

トラックバックURL: https://blog.netandfield.com/mt/mt-tb.cgi/5631

電気ウナギ的○○

About This Site

電気ウナギ的○○
岩国在住。広島で働く超零細IT企業社長のいわゆる社長日記。
何か、酒と食い物のことばかり書いているようで・・・お察しのとおり、肥満体です:-)


2011/06/24
iPhone用サイト公開

Create with jQuery, jQTouch.


CLOSE