やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

LibreOfficeのCalcでマクロの記録をする

 BASIC限定。実行したらエラー……。使い道はUIの操作に対応するAPI名の調査くらいか。

手順

  1. マクロの記録を有効にする
  2. マクロを記録する
  3. 操作する
  4. 記録の終了
  5. マクロを保存する
  6. マクロを閲覧する
  7. マクロを実行する

1. マクロの記録を有効にする

  1. LibreOffice Calc を起動する
  2. メニューのツールオプションをクリックする
    f:id:ytyaru:20200929081412p:plain
  3. ダイアログ左側にあるツリーからLibreOffice詳細を展開する
  4. ダイアログ右側にあるマクロの記録を有効にするチェックボックスをONにする
  5. OKボタンをクリックする

2. マクロを記録する

  1. メニューのツールマクロマクロの記録をクリックする

3. 操作する

 記録したい操作を行う。何でもいいが、ここでは以下のようにした。

  1. セルA110を入力する
  2. セルB120を入力する
  3. セルC1=A1+B1を入力する

f:id:ytyaru:20200929082140p:plain

4. 記録の終了

  1. 「記録の終了」をクリックする

f:id:ytyaru:20200929082151p:plain

5. マクロを保存する

  1. 新規モジュールボタンをクリックする
  2. Module2が作成されるのでクリックする
  3. 保存ボタンをクリックする
    f:id:ytyaru:20200929082232p:plain

6. マクロを閲覧する

  1. メニューのツールマクロマクロの編集をクリックする
  2. 画面左側のツリーからマイマクロ&ダイアログStandardModule2をクリックする
    f:id:ytyaru:20200929082458p:plain

REM  *****  BASIC  *****


sub Main
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 ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "StringName"
args1(0).Value = "1"

dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args1())

rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "StringName"
args2(0).Value = "2"

dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args2())

rem ----------------------------------------------------------------------
dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "StringName"
args3(0).Value = "=A1+B1"

dispatcher.executeDispatch(document, ".uno:EnterString", "", 0, args3())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:JumpToNextCell", "", 0, Array())


end sub

7. マクロを実行する

  1. CalcのA1,B1,C1に入力した値を削除する(セルを選択してDelキー押下する)
  2. メニューのツールマクロマクロの実行をクリックする
  3. ダイアログのツリーからマイマクロStandardModule2をクリックする
  4. 実行ボタンをクリックする
  5. Calc画面にフォーカスする

 あれ、なんかエラーなんですけど……。

f:id:ytyaru:20200929083147p:plain

 記録したBASICコードをよく見てみると、どのセルに代入するかが書かれていない。ダメじゃん!

所感

 「マクロの記録」は思った以上に使えなかった。再現できないコードを吐き出して何になるんだよ……。

対象環境

$ uname -a
Linux raspberrypi 4.19.97-v7l+ #1294 SMP Thu Jan 30 13:21:14 GMT 2020 armv7l GNU/Linux