LibreOfficeでのマクロ登録の色々な方法

プログラミング

概要

LibreOfficeでPythonのマクロを作っても直接セル内から関数として使えるわけではありません。
しかし、「Pythonスクリプトの管理」からマクロを実行するから呼び出して使うのは面倒ですよね。
そこで、簡単に呼び出すために何かに登録して使うのが便利です。
その方法が幾つかありますので、それを紹介します。
なお、セル内から関数として使う方法はほかの機会に説明します。

LibreOfficeのマクロ登録の方法の色々

何種類かありますのでさらっと説明します。

  1. ボタンに登録する
  2. メニューに登録する
  3. ツールバーに登録する
  4. コンテキストメニューに登録する
  5. キーボードショートカットに登録する
  6. イベントに登録する

以上、6種類の方法がありますのでそれぞれ詳細に説明します。
それとプログラミングする方には、登録の際には関数を直接指定するのではなくラッパーを作って登録すれば楽です。
という説明すらいらないと思いますが、初心者の方向けに詳しく書いておきます。

ラッパーを作るとは何か

いきなり余談の様な話になってしまいますがマクロの登録に便利なのでラッパーについて説明します。

ラッパーとは、関数をラップするものです。
新しい関数を作るたびにまくろを登録し直すのは面倒です。
そこで、ラッパーを登録しておいて書き換えれば登録しなおさなくても新しい関数が呼び出されるようにします。
たとえば、ボタンを押すとdisp_message()という関数が呼び出されるようにしたいとします。
ボタンに直接disp_message()を登録しても良いのですが、run_macro_wrapper()という関数をボタンに登録しておいて


def run_macro_wrapper():
    disp_message()

というようにラッパーを作っておけば、disp_message()を変更してもボタンに登録しなおす必要がありません。
disp_hello_message()に変更したいときは、run_macro_wrapper()を書き換えるだけで済みます。


def rum_macro_wrapper():
    disp_hello_message() #別の関数に書き換える

というわけです。

ボタンに登録する(コントロールのイベントに登録する)

ボタンを押すとマクロが実行されるようにします。
今回はボタンで説明していますが、ボタンに限らず様々なコントロールのイベントにマクロを登録する場合も同様です。
ボタンの場合は、Pythonの関数の作り方(引数)に少し注意が必要です。
そのことは、最後に説明してあります。
ボタンに登録するには、ツールバーにボタンを追加してそのボタンにマクロを登録します。
「ツール」->「フォーム」->「デザインモード」
でデザインモードに入ります。


デザインモードのボタンもあるのでそちらのほうが簡単ですね。

次に、
「挿入」->「フォームコントロール」->「ボタン」
でボタンを追加します。
そして、ボタンを右クリックして「コントロールのプロパティ」で「コントロールのイベント」タブを選択します。


今回は、「実行時」に登録します。
右側のボタンを押すと「アクションの割り当て」ダイアログが開きます。
で、「マクロ」ボタンを押すと「マクロセレクター」が開きますのでモジュールと関数を選択して「OK」を押します。


これでボタンにマクロが登録されました。
この場合、test05.pyモジュールのdisp_msgboxメソッドが登録されました。
カッコ内の「user」とあるのは「マイマクロ」内のマクロだという事です。


デザインモードを終了してボタンを押すとマクロが実行されます。
この時もしかするとエラーが出るかもしれません。
内容は、「引数が0個になってけど、引数が一つ必要です」というエラーです。
ですのでボタンから使う関数は、


def run_macro_wrapper(*args): #引数を受け取れるよう可変引数を設定する
    disp_message()

などとして引数を受け取るようにします。

メニューに登録する

新しいメニューを追加してそこからマクロを実行する方法です。
次は、メニューに登録する方法を説明します。
「ツール」->「カスタマイズ」を選択して「メニュー」タブを選択します。

右側のペインの「対象」の右横のボタンを押してメニューを追加します。

次に、左ペインの「カテゴリー」から「マクロ」を選択します。

そうすると「利用可能なコマンド」の部分にマクロを選択する画面が表示されます。

登録するマクロを選択して真ん中辺りの右矢印をクリックすると

メニューに登録されました。
右下の「変更」ボタンを押して名前を変更することもできます。
今回は、「マクロを実行する」に名前を変更しました。
また、メニューの位置もメニューの追加をするときに上下矢印で位置を移動できるようになっています。

ツールバーに登録する

「メニュー」に登録するのとほぼ同じです。

コンテキストメニューに登録する

「コンテキストメニュー」とは、右クリックで出現するポップアップメニューです。
ポップアップしたメニューからマクロを実行します。
どこかの上で右クリックするとそのクリックした場所が「対象」になります。
メニューの時と同様に、
「ツール」->「カスタマイズ」で画面が表示されたら「コンテキストメニュー」タブを選択します。
今回は、右ペインの「対象」で「セル」を選んでみました。
「セル」が対象であれば大体どこでもコンテキストメニューが使えるかと思います。
「コンテキストメニュー」にマクロを追加する場合は、右ペインの「挿入」ボタンでセパレータなどを挿入したうえでマクロを登録すると使いやすいでしょう。

マクロの登録の仕方は、ほか同様です。

キーボードショートカットに登録する

好みのショートカットキーを押すとマクロが実行されます。
メニューの時と同様に、
「ツール」->「カスタマイズ」で画面が表示されたら「キーボード」タブを選択します。
右上の「Calc」をチェック、
下側のペインでマクロを選択し、
上側のペインで好みのキーを選択してから
「割り当て」ボタンをクリックすると
登録したキーを(今回は Alt+”A”)押すたびにマクロが実行されます。

イベントに登録する

ドキュメントを保存したときとか何かの「イベント」があったときに自動でマクロが実行されます。
メニューの時と同様に、
「ツール」->「カスタマイズ」で画面が表示されたら「イベント」タブを選択します。
これは、あまり使わないと思いますが、
「イベント」を選択して「マクロ」ボタンを押して

マクロを選択します。

そうすると何かのイベントがあったときにマクロを毎回実行します。
今回は、「文章を保存する時」につまりセーブするときにマクロが実行されます。

まとめ

今回は、マクロ使う場合に簡単に実行できるようマクロを登録する方法を説明しました。
また、使いやすいように色々な方法で実行方法を紹介させていただきました。
このように自由度が高いLibreOfficeなのでかえってわかりづらくなっている部分もあるかと思います。
そのあたりをなるべく平易に詳しく説明できればと考えています。
近いうちに、PythonでBasicのプロシージャやファンクションを使ったり、
逆にBasicからPythonの関数を使ったりと言うことについて説明したいと思います。
それに関連してセル内からPythonの関数を使えるようにする方法(Basicのファンクションに変換すると使えます。)について説明します。

Commnts