15
”Hello World!” から始める Calc LibreOffice Basic MS Office VBA のように、LibreOffice にも、「 LibreOffice Basic 」と呼ばれるマクロを作成・実 行するための仕組みがあります。今回は、この LibreOffice Basic を使ってみたいと思います。 まず前半では、プログラミングの定番である、”Hello World!と表示させるマクロの作り方から、 組み込み関数変数制御文について実習し、後半では、LibreOffice 固有のオブジェクトソッドプロパティについて、分からないことがあった場合の調べ方・情報源について紹介します。 マクロとは LibreOffice Basic」で作るプログラムなどを、一般に「マクロ」と言います。マクロとは、「マウスや キーボードでの一連の操作・入力」などをファイルに保存しておいて、あとで呼び出して一気に実 行できるようにした指示書のようなものです。その場1回限りの作業であれば、わざわざマクロを作 る必要はありません。しかし、何度も行う、ステップ数の多い定型繰り返し作業であれば、マクロに しておくことで、素早く間違いなく処理できるうえに、対話方式で処理条件を指定したり、条件に応 じて異なる処理をしたりもできます。 マクロを使う前の設定確認 LibreOffice では、安全のため、標準ではマ クロを実行できない設定になっています。マ クロを使うには、事前にセキュリティレベルを 下げておく必要があります。「ツール -> オプ ション -> LibreOffice -> セキュリティ -> マク ロセキュリティ 」で、レベルは「中(M 」にす るのが一般的でしょう。 Java 実行環境( JRE)」と「マクロの記録」 今回扱う内容の範囲では、JRE は必 須ではない(なくても動く)のですが、 警告がでますので、必要に応じて JRE をインストールし、設定します。また、マ ウスやキーボードでの操作をマクロ コードに記録してくれる「マクロの記録 を有効にする(D )」にもチェックをいれ ておきます。 - 1 - 1: セキュリティレベル 2: JRE の指定 と マクロの記録を有効にする

"Hello World!" から始める Calc で LibreOffice Basic

  • Upload
    78tch

  • View
    10.618

  • Download
    6

Embed Size (px)

Citation preview

Page 1: "Hello World!" から始める Calc で LibreOffice Basic

”Hello World!” から始める Calc で LibreOffice Basic

 MS Office の VBA のように、LibreOffice にも、「 LibreOffice Basic 」と呼ばれるマクロを作成・実

行するための仕組みがあります。今回は、この LibreOffice Basic を使ってみたいと思います。

 まず前半では、プログラミングの定番である、”Hello World!” と表示させるマクロの作り方から、

組み込み関数や変数や制御文について実習し、後半では、LibreOffice 固有のオブジェクトのメ

ソッドやプロパティについて、分からないことがあった場合の調べ方・情報源について紹介します。

マクロとは

 「LibreOffice Basic」で作るプログラムなどを、一般に「マクロ」と言います。マクロとは、「マウスや

キーボードでの一連の操作・入力」などをファイルに保存しておいて、あとで呼び出して一気に実

行できるようにした指示書のようなものです。その場1回限りの作業であれば、わざわざマクロを作

る必要はありません。しかし、何度も行う、ステップ数の多い定型繰り返し作業であれば、マクロに

しておくことで、素早く間違いなく処理できるうえに、対話方式で処理条件を指定したり、条件に応

じて異なる処理をしたりもできます。

マクロを使う前の設定確認

 LibreOffice では、安全のため、標準ではマ

クロを実行できない設定になっています。マ

クロを使うには、事前にセキュリティレベルを

下げておく必要があります。「ツール -> オプ

ション -> LibreOffice -> セキュリティ -> マク

ロセキュリティ」で、レベルは「中(M)」にす

るのが一般的でしょう。

「Java 実行環境(JRE)」と「マクロの記録」

 今回扱う内容の範囲では、JRE は必

須ではない(なくても動く)のですが、

警告がでますので、必要に応じて JRE

をインストールし、設定します。また、マ

ウスやキーボードでの操作をマクロ

コードに記録してくれる「マクロの記録

を有効にする(D)」にもチェックをいれ

ておきます。

- 1 -

図 1: セキュリティレベル

図 2: JRE の指定 と マクロの記録を有効にする

Page 2: "Hello World!" から始める Calc で LibreOffice Basic

マクロの記録先

さっそくマクロを作っていき

ましょう。 まずは Calc を起

動し、「ファイル -> 名前を付

けて保存(A)」で「マクロの

練習.ods」とします。次に、

「ツール -> マクロ -> マクロ

の管理 -> LibreOffice

Basic(B)」とすると、マクロの

選択画面がでます。「マイマ

クロ」ライブラリコンテナ下

の、「Standard」ライブラリ

の下の、「Module1」モ

ジュールの「Main」サブ

ルーチンというマクロが選

択された状態になっていると思いますが、今回は、いま開いているファイルである「マクロの練

習.ods」に記録します。

 マクロの最小単位は、「サブルーチン」や「ファンクション」ですが、これらは「モジュール」という

ファイルのような単位で管理されます。モジュールは「ライブラリ」というフォルダのような単位で管

理されます。さらにライブラリは3つの「ライブラリコンテナ」という共有フォルダのようなもののい

ずれかに属します。3つのライブラリコンテナは、保存場所や挙動がそれぞれ違います。

ライブラリコンテナ 保存される場所とその挙動

マイマクロ ライブラリ 現在のログインユーザーのホームディレクトリに保存さ

れ、このユーザーでログインした時には、どのファイルを

開いていても、このマクロを実行できる。

LibreOffice のマクロ ライブラリ 現在のマシンの LibreOffice インストールフォルダ内に保

存され、現在のマシンにどのユーザーでログインしても、

このマクロを実行できる。

マクロの練習.ods(いま開いてい

るファイル)

各ファイルに含まれて保存される。そのファイルを開いた

すべての環境で、このマクロを実行できる。

“Sub” と “End Sub”の間に

 「マクロの記録先」で「マクロの練習.ods」を選

択し、「新規作成(N)」をクリックすると、モジュール

名の指定画面で「Module1」と出ますので、そのま

まで「OK」とします。そうすると、図のような

「LibreOffice Basic IDE」の画面が立ち上がります。

- 2 - 図 4: LibreOffice Basic IDE

図 3: マクロの記録先

Page 3: "Hello World!" から始める Calc で LibreOffice Basic

 モジュールを新規作成すると、空(カラ)の「Main」サブルーチンが用意されます。「Sub」という

行から、「End Sub」という行の間に、実際の処理内容のマクロコードを書いていきます。「Sub」の

後ろの「Main」というのは、「サブルーチン名」になります。ひとつのモジュールのなかに、複数のサ

ブルーチンを書くこともできますので、その場合は、自分で適宜、サブルーチン名を付けることにな

ります。スタイルとして、「Main」サブルーチンではほかのサブルーチンを呼び出すだけにして、実際

の処理の実装はほかのサブルーチンでする、というような流派もあると思います。

 オブジェクトカタログを確認すると、今回作った「Module1」は、「Standard」ライブラリの配下にで

きていると思います。ひとつのライブラリコンテナのなかに、複数のライブラリを持たせることもでき

るのですが、標準で作成されるこの「Standard」ライブラリは、ファイルが開かれたときに自動的に

読み込まれることになっています。その他のライブラリは、マクロを実行する前に、明示的にそのラ

イブラリを読み込むというひと手間が必要です。

最初の一歩は「MsgBox」関数

 それではいよいろマクロコードを書いていきます。次のようにしてください。

Sub Main

MsgBox( “Hello World!” )End Sub

 書けたら、まず保存しましょう。保存は、ファイルメニューからできるほか、左上の FD や HDD のア

イコンをクリックすることでもできます。右のほうにある保存アイコンをクリックすると、マクロコードを

テキストファイルでエクスポートすることができますが、今回は使いません。

 なお、「REM」(Remark)は、そこから行末までを「コメント」とするステートメントで、行頭に置け

ば実行時には行全体が無視されます。これは、あとでマクロコードを読んだときに、処理内容を理

解しやすくなるようなコメントや区切りを入れるのに使います。また、シングルクォーテーション「 ' 」

も、そこから行末までをコメント扱いにすることができます。同じ働きをしますが、行頭には「Rem」、

行の途中には「'」とすれば見やすいと思います。

“Hello World!”

 保存できたら、いよいよマクロを実行しましょう。「BASIC プログラムの実行(F5)」ボタン か、

「ステップイン(F8)」ボタン をクリックしてみましょう。後者は、ボタンを1回クリックするたびに

マクロが1行ずつ実行されるので、マクロコードが長くなってきたときに、意図した通りに処理できて

いるかを順を追って確認することができます。

 IDE 画面から Calc 画面に戻って、「ツール -> マクロ -> マクロを実行(U)」からマクロセレクター

画面で「Module1」モジュールの「Main」サブルーチンを選んで、「実行」ボタンをクリックすることで

も、マクロを実行することができます。図のように、メッセージボックスが表示されたでしょうか。

- 3 - 図 5: Hello World!

Page 4: "Hello World!" から始める Calc で LibreOffice Basic

関数の仕様を調べる

 さて、MsgBox ( ) 関数というものが出てきましたが、これは、LibreOffice Basic によってあらかじ

め用意されている組み込み関数です。では、この関数の仕様は、どこで調べればいいでしょうか。

 IDE 画面で「LibreOfficeヘル

プ」ボタンをクリックして、索引

タブで検索語(S)を「MsgBox」

としてみましょう。または、目次

タブで、「マクロとプログラミン

グ -> コマンドリファレンス ->

実行時関数、ステートメント、

演算子 -> 画面入出力関数 ->

表示関数」としても、同じヘル

プにたどり着けます。Calc 画面

からヘルプを開いた場合など

は、ヘルプウィンドウ上の「ナビ

ゲーション範囲」を、

「LibreOffice Basic」としてみる

とよいでしょう。

 なお、これとまったく同じ資料が、LibreOffice のヘルプサイトにも掲載されています。

「 https://help.libreoffice.org/Main_Page/ja 」において、「・LibreOffice Basic (ベーシック言語を使っ

たプログラミング) -> 実行時関数 -> 画面入出力関数 -> 表示関数」とたどります。

 ヘルプを見ると、「MsgBox ( )」関数の書式は

MsgBox ( ”メッセージ文字列” [ , ボタンの種類をコード指定 [ , ”タイトル文字列” ] ] )

というふうに、3項目の指定ができることが分かります。関数に対する指定項目のことを、引数(ひ

きすう) 、Argument といいます。構文の例で、大括弧でかこわれている引数は、省略が可能です。

「MsgBox ( ) 」関数では、第2と第3の引数を省略したり、第3引数だけを省略したりすることができ

ます。第2引数だけを省略したいときは、「 MsgBox( Arg1 , , Arg3) 」のようにカンマを続けて、第2引

数のところをカラにします。なお、引数を省略した場合は、デフォルト値を設定したことになります。

 また、関数は、与えられた引数を計算してその結果を返します。この値のことを戻り値(もどり

ち)といいます。MsgBox ( ) 関数は、「どのボタンが押されたか」というコードを戻り値として返しま

す。ステートメントとは、命令語や制御文などのことをいいます。(Sub とか End とか Rem とか)

メモ y=f(x)で言えば、f(x)が関数、xが引数、yが戻り値です。

- 4 -

図 6: LibreOffice ヘルプ

Page 5: "Hello World!" から始める Calc で LibreOffice Basic

その他の関数の調べかた

 ヘルプを見ると、他にもたくさんの組み込み関数があるのが見えたと思います。例えば、「小数点

以下を四捨五入したい、切り捨てたい」とか、「商の余りを求めたい」とか、「小文字を大文字にし

たい」というような場合に、どの関数を使ったらいいのかを調べるには、「LibreOfficeヘルプ」の「ナ

ビゲーション範囲」を「LibreOffice Basic」にして、目次タブで、「マクロとプログラミング -> コマンド

リファレンス -> 実行時関数、ステートメント、演算子」などのなかを探します。「同 -> 数値関数」や

「同 -> 文字列 -> 文字列の編集」などは、特によく使うでしょう。「マクロとプログラミング」の配下

は、ひと通り目を通されることをお勧めします。

 なお、これとまったく同じ資料が、LibreOffice のヘルプサイトにも掲載されています。

「 https://help.libreoffice.org/Calc/Functions_by_Category/ja 」で、「数学」や「文字列」とたどります。

Sub と Function

 マクロには、「Sub」のほかに

「Function」というのもあります。サブ

ルーチンとの違いは、処理結果をファ

ンクション名の変数に代入して戻り

値として返すところです。また、

Function は、他の Sub から呼び出し

て使うだけでなく、スプレッドシート上

のセルにおいて、自作関数として、ま

るでワークシート関数のように使うこ

ともできます。Main サブルーチンの

下に、以下を追記して保存したあと、

Calc 画面に戻って、適当なセルに「

=fFive()」と入力してみてください。なおこのとき、関数名の大文字と小文字は区別されません。

Function fFive() fFive = 5

End Function

変数とは

 プログラミングには変数がかかせません。変数とは、マクロコードにおいて本来であれば特定の

数値や文字列を決め打ちで書くような部分を、変数に置き換えて書いておき、マクロを実行すると

きには変数に本来の数値や文字列を代入して、決め打ちしていたときと同じ動きをさせる、という

抽象化のための仕組みです。(例:「あれなんやけど、できてるかな?」「ああ、あれな。できてるで。」

で通じる、「あれ」が変数。シチュエーションによって「あれ」の指すものは変わる。)

 変数を使って、コードを書く量を少なくしたり、のちに変更があってもマクロコードの修正が少な

く済むようにしたり、そのコードで何をやっているのかが分かりやすくなるようにします。

- 5 -

図 7: Function はセルでも使える

Page 6: "Hello World!" から始める Calc で LibreOffice Basic

 まず、実際に変数を使ってみましょう。「Module1」モジュールの「Main」サブルーチンを、次のよう

に書き換えて、実行してみましょう。

Sub Main

Dim sMsg as String

Dim iVal as Integer

sMsg = “Hello World!”

iVal = MsgBox( sMsg , 3 ) 'MsgBox()関数の第3引数のみ省略

MsgBox( iVal )

iVal = fFive()

MsgBox( iVal)End Sub

 「sMsg」と「iVal」というのが、変数です。これは、筆者が勝手に決めた変数名です。今回はたまた

ま「sMsg」、「iVal」としましたが、ほかの名前にしても、実行結果は変わりません。変数は自分で好

きなように命名することができます。ただし、組み込み関数名やステートメント名などの予約語で使

われている名前は、変数名には使えません。(Sub とか MsgBox とか)

 このように、変数は、前もって用意されているのではなく、サブルーチンの初めなどで、次のよう

な形で定義(宣言 Dimension)します。データの型には、数値、文字列、オブジェクトなどがあります。

Dim 変数名 as データの型

変数の仕様を調べる

 変数のデータの型の詳しい仕様は、LibreOffice Basic IDE で「LibreOfficeヘルプ」ボタンをクリッ

クして、索引タブで検索語(S)を「変数」とすることで、みることができます。

 または、目次タブで、「マクロとプログラミング -> 一般的な情報およびユーザーインターフェイス

の使用法 -> 構文 -> 変数の使用法」、もしくは「マクロとプログラミング -> ガイド -> 変数の使用

法」としても、同じヘルプにたどり着けます。

 なお、これとまったく同じ資料が、LibreOffice のヘルプサイトにも掲載されています。

「 https://help.libreoffice.org/Main_Page/ja 」で、「・LibreOffice Basic (ベーシック言語を使ったプロ

グラミング)」->「LibreOffice Basic のプログラミング」->「構文」->「変数の使用法」とたどります。

 変数名の命名規則には、様々な流派があり、ある意味ノウハウ的なところもありますが、

 1文字目:「変数のデータ型の型名の頭文字の小文字」

 2文字目:「大文字」

 3文字目以降:「小文字」

という形にすると、変数であることがすぐわかるうえに、どんな値が代入されているのかを推測しや

すくなるのではないでしょうか。

- 6 -

Page 7: "Hello World!" から始める Calc で LibreOffice Basic

変数のクラス 内容 宣言の例

数値 整数(-32,768〜32767)

ロング整数(-2,147,483,648〜2,147,483,647)

単精度小数(浮動小数点方式)

(3.402823x10E38〜1.401298x10E-45)

倍精度小数(浮動小数点方式)

(1.79769313486232x10E308〜

4.94065645841247x10E-324)

通貨型(固定小数点方式)(整数部 15桁と

小数部 4桁)

Dim iVal As Integer

Dim iVal%

Dim lVal As Long

Dim lVal&

Dim sVal As Single

Dim sVal!

Dim dVal As Double

Dim dVal#

Dim cVal As Currency

Dim cVal@

文字列 最大 65,535 文字の文字列を格納できます。 Dim sVal As String

Dim sVal$

ブール型 TRUE(真)または FALSE(偽)という2つの値

のどちらか一方のみを格納できます。数値 0

は FALSE と評価され、その他すべての値は

TRUE と評価されます。

Dim bVal As Boolean

オブジェクト なんでも代入できる、汎用的な型。処理対象

となるドキュメントや、セルなども、この型の変

数に格納します。

Dim oVal As Object

その他 日付型 Dim dVal As Date

オブザーバーで変数の変化を観

察する

 「sMsg」や「iVal」にカーソルを置いた

状態で、「オブザーバーの有効化(F7)」

ボタン をクリックすると、左下のオブ

ザーバーウィンドウの変数の欄に、

「sMsg」や「iVal」が表示されます。 「ス

テップイン(F8)」ボタンを数回クリックし

て、「値」や「種類」がどのように変化して

いくか観察します。変数の上にマウス

オーバーすることでも、その時点でその

変数に代入されている値を確認すること

ができます。

- 7 -

図 8: オブザーバーウィンドウで変数の変遷を観察

Page 8: "Hello World!" から始める Calc で LibreOffice Basic

配列とは

 いくつかの変数をまとめて扱いたい場合に、1つの変数名においてまとめることができます。これ

を、配列といいます。詳しくは、ヘルプで「変数の使用法」の配列の説明を確認してください。

配列の宣言 配列の長さ(インデックス、要素の数)

Dim sVal$(20) 0 から 20 まで計 21 個の要素が確保されます。

Dim sVal$(5,4) 計 30 個の要素が確保されます (6 x 5 要素の行列として)。

Dim sVal$(5 To 25) 5 から 25 まで計 21 個の要素が確保されます。

Dim sVal$(-15 To 5) -15 から 5 まで (0 も含めた) 計 21 個の要素が確保されます。

 配列の要素を利用する場合は、インデックス番号を指定します。

 図の例では、インデックスが0から2までで要素が3個の配列 sMsg ( ) を宣言して、各要素に順

番に文字列を代入し、順番に MsgBox 関数で表示させています。

 なお、配列のインデックスの最小値、最大値は、LBound()関数、UBound()関数で求められます。

Sub Main

Dim sMsg(2) As String

sMsg(0) = "Good Morning World!"

sMsg(1) = "Hello World!"

sMsg(2) = "Good Night World!"

MsgBox( sMsg(0) )

MsgBox( sMsg(1) )

MsgBox( sMsg(2) )

MsgBox( LBound(sMsg()))

MsgBox( UBound(sMsg()))End Sub

制御文とは

 通常、マクロコードは先頭行から順番に実行されます。これを、特定の行だけ、指定した回数繰

り返し実行させたり、指定した条件が成立した場合にだけ実行させたりすることができます。このよ

うなプログラムの実行制御を行うためのステートメントは、大きく分けて条件分岐、ループ (繰り返

し)、ジャンプ (移動) の3種類があります。

詳しい仕様は、LibreOffice Basic IDE で「LibreOfficeヘルプ」ボタンをクリックして、目次タブで、「マ

クロとプログラミング -> コマンドリファレンス -> 実行時関数、ステートメント、演算子 -> プログラム

実行の制御」でみることができます。

 なお、これとまったく同じ資料が(ry

- 8 -

Page 9: "Hello World!" から始める Calc で LibreOffice Basic

条件判定ステートメント

 例として、「If...Then...Else」ステートメントを使ってみましょう。

Sub Main

Dim sMsg(2) As String

Dim iVal as Integer

sMsg(0) = "Good Morning World!"

sMsg(1) = "Hello World!"

sMsg(2) = "Good Night World!"

iVal = MsgBox(“今は朝ですか?”,3,”If Then Else”)

If iVal = 6 Then

MsgBox( sMsg(0) )

ElseIf iVal = 7 Then

MsgBox( sMsg(2) )

Else

MsgBox( sMsg( 1 ) )

End IfEnd Sub

ループ(繰り返し)

 例として、「For...Next」ステート メントを使ってみましょう。

Sub Main

Dim sMsg(2) As String

Dim iVal as Integer

sMsg(0) = "Good Morning World!"

sMsg(1) = "Hello World!"

sMsg(2) = "Good Night World!"

For iVal = 0 To 2

MsgBox( sMsg(iVal) )

NextEnd Sub

ジャンプ(移動)

 例として、「On Error GoTo ...Resume」ステートメントを使ってみましょう。

これは、「マクロとプログラミング -> コマンドリファレンス -> 実行時関数、ステートメント、演算子 ->

エラーを制御するための関数」に分類されています。

- 9 -

Page 10: "Hello World!" から始める Calc で LibreOffice Basic

Sub MainOn Error GoTo ErrorHandler

Error(1)'Error関数で、あえてエラーを発生させます。

Exit SubErrorHandler:

Reset

MsgBox ("エラーが起きました。エラー内容:" & Error,0+48,0"エラー発生!")End Sub

メモヘルプには、サンプルコードが掲載されています。これをコピー&ペーストでモ

ジュールに持ってきて実行し、実際の動作を確認してみるのもよいでしょう。

Calc 的なマクロも軽く

 「Calc 固有のオブジェクト」を直接操作するスタイルのマクロについて、次のサイトに、とても詳し

く、わかりやすく説明されています。ここまでで、マクロを「読む」ことはできるようになったと思いま

す。こちらのサイトにも、多くのサンプルが掲載されていますので、コピペして確認してみましょう。

Macro の杜 [ マクロ for OpenOffice.org and LibreOffice ]  Calc( 表計算 )

http://openoffice3.web.fc2.com/OOoBasic_Calc.html

Sub MainThisComponent.Sheets(0).getCellByPosition(0,0).value=1

'←セル A1に数値の 1を入力

ThisComponent.Sheets(0).getCellByPosition(0,1).String="test"

'←セル A2に文字列の testを入力

ThisComponent.Sheets(0).getCellByPosition(0,2).Formula="=A1*10"

'←セル A3に式( =A1* 10)を入力

End Sub

「Sheets」の「getCellByPosition ( ) 」 というのを、調べてみたいところです。

オブジェクトの調べ方

 オブジェクトにどのようなものがあるのか、またそのオブジェクトにはどのようなメソッドやプロパ

ティがあるのか、ということを調べるには、以下のサイトで探しますが、慣れるまではなかなか必要

な情報にたどり着けないかもしれません。

・LibreOffice 4.2 API Documentation ( http://api.libreoffice.org/  )

- 10 -

Page 11: "Hello World!" から始める Calc で LibreOffice Basic

MRI -UNO Object Inspection Tool (オブジェクトブラウザ)

 「MRI」は、オブジェクトのメソッドやプロパティにどのようなものがあるか、一覧表示してくれる拡

張機能です。以下のサイトから最新版(執筆時点では「MRI-1.2.1.oxt」)をダウンロードしてインス

トールします。

 ・Apache OpenOffice Extensions MRI – UNO Object Inspection Tool

 http://extensions.services.openoffice.org/en/project/mri-uno-object-inspection-tool

 インストールすると、「ツール -

>アドオン」というメニューが増え、

「同 -> MRI」とたどることで、MRI

が起動します。「同 -> MRI <-

selection」とすると、その時点で

選択しているオブジェクトについ

ての情報が表示されます。

 「同 -> MRI」から、

「Properties」で「Sheets」をダブ

ルクリックし、「Methods」で

「getCellByPosition」の行をみま

す。第1引数が列で、第2引数が

行の指定であることが分かりま

す。「getCellByPosition」を選択し

た状態で、「IDL Ref.」ボタンをク

リックすると、Web 上のリファレンスページが開き、さらに詳しく調べることができます。

 また、マクロ内で利用するには、サブルーチン内で呼び出したうえで、確認したいオブジェクトの

前に「 mri 」と書くと、そのオブジェクトについての情報が表示されます。

例えば、「ThisComponent」を調べる場合には、次のように書きます。

この書き方は、「マイマクロ」のなかにできている「MIRLib」ライブラリーの「LoadMriLibrary」サブ

ルーチンのなかのに書いてありますので、コピー・ペーストすればよいでしょう。

Sub MainGlobalscope.BasicLibraries.LoadLibrary( "MRILib" )mri ThisComponent

End Sub

 さらに、オブザーバーで「ThisComponent」をウォッチして、どういう構造になっているか見てみる

と、参考になるでしょう。

- 11 -

図 9: MRI オブジェクトブラウザ

Page 12: "Hello World!" から始める Calc で LibreOffice Basic

マクロの記録

 「ツール -> マクロ -> マクロの記録」とたどれば、停止ボタンを押すまでの間、マウスやキーボー

ドでの操作を「記録」して、自動的にマクロにしてくれます。しかし「マクロの記録」で生成されるマ

クロコードは、ちょっと独特です。試しに、セル A1 が選択されている状態から「マクロの記録」を初

- 12 -

図 10: マクロ内で MRI を呼び出す

Page 13: "Hello World!" から始める Calc で LibreOffice Basic

めて、「セル B3 を選択」して、「文字列”LibreOffice”と入力」して、「Enter を押下してひとつ下のセ

ルに移動」して、そこで「記録の終了」を押下しましょう。マクロの保存先を聞かれますので、「マク

ロの練習.ods -> Standard -> Module1 -> Main」として「保存」ボタンをクリックします。上書きするの

かと聞かれますので、「はい」としましょう。以下のようなマクロコードが記録されたと思います。

sub Mainrem ---------------------------------------------------------------------rem define variablesdim document as objectdim dispatcher as objectrem ---------------------------------------------------------------------rem get access to the documentdocument = ThisComponent.CurrentController.Framedispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem -----------------------------------------------「セル B3を選択」----dim args1(0) as new com.sun.star.beans.PropertyValueargs1(0).Name = "ToPoint"args1(0).Value = "$B$3"

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

rem ------------------------------------「文字列”LibreOffice”と入力」----dim args2(0) as new com.sun.star.beans.PropertyValueargs2(0).Name = "StringName"args2(0).Value = "LibreOffice"

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

rem ------------------------------「Enterを押下してひとつ下のセルに移動」----dispatcher.executeDispatch(document, ".uno:JumpToNextCell", "", 0, Array())

end sub

ひとつひとつの操作が、「Dispacher」に対してコマンド URL と設定値を与えて実行する、という体

裁のマクロコードで記録されています。オブジェクトを直接操作するスタイルのマクロコードと見比

べると、ちょっとまわりくどいというか、なれるまでは意味がわかりにくいかもしれません。

- 13 -

Page 14: "Hello World!" から始める Calc で LibreOffice Basic

 このことについても、やはり先ほどのサイトに、とても詳しく、わかりやすく説明されています。

Macro の杜(OpenOffice.org/LibreOffice Basic編)

Macro の記録 / Record Macro  (魔法の Command 「 DispachHelper 」編 )

 http://openoffice3.web.fc2.com/OOoBasic_DespatchHelper.html

 また、「Dispacher」に対して与えられるコマンド URL にどのようなものがあるかについては、次の

サイトが参考になります。もちろん、マクロにしたい操作を「マクロの記録」でコードにすることでも、

目的のコマンド URL がわかると思います。

 http://hermione.s41.xrea.com/pukiwiki/index.php?OOoBasic%2FGeneric%2Fcommands_2.3.0

その他お薦めなサイトなど

・公式ヘルプサイト

https://help.libreoffice.org/Main_Page/ja

https://help.libreoffice.org/Basic/MsgBox_Function_Runtime/ja

https://help.libreoffice.org/Basic/Using_Variables/ja

https://help.libreoffice.org/Basic/Controlling_Program_Execution/ja

・The Document Foundation (TDF) Wiki

 https://wiki.documentfoundation.org/

・Getting Started with LibreOffice 「Chapter13: Getting Started with Macros」(英語)

 https://wiki.documentfoundation.org/images/9/9a/GS4013-GettingStartedWithMacros.pdf

・Calc Guide 「Chapter12: Calc Macros」(英語)

 https://wiki.documentfoundation.org/images/2/27/CG4012-CalcMacros.pdf

・LibreOffice 4.2 API Documentation

 http://api.libreoffice.org/

・SpreadsheetDocument

http://api.libreoffice.org/docs/idl/ref/servicecom_1_1sun_1_1star_1_1sheet_1_1SpreadsheetDocument.html

・SpreadsheetDocumentSettings

http://api.libreoffice.org/docs/idl/ref/servicecom_1_1sun_1_1star_1_1sheet_1_1SpreadsheetDocumentSettings.html

- 14 -

Page 15: "Hello World!" から始める Calc で LibreOffice Basic

・JA福岡「Excel to Calc マクロ移行マニュアル」

http://www.ja-fukuoka.or.jp/blog/archives/2012/05/exceltocalkpdf.php

・OSS( Open Source Software )でいこう!!/Macro の一歩

 http://openoffice3.web.fc2.com/macro_ippo.html

・Macro の杜(OpenOffice.org/LibreOffice Basic編)/[ マクロ for OpenOffice.org and LibreOffice ]

 http://openoffice3.web.fc2.com/OOoBasic_Calc.html

・MRI オブジェクトブラウザ(「 MRI-1.2.1.oxt 」をダウンロードする。)

 http://extensions.services.openoffice.org/en/project/mri-uno-object-inspection-tool

 https://github.com/hanya/MRI/wiki/Home_ja

 http://openoffice3.web.fc2.com/OOoBasic_General.html#OOoGMM01

 http://hermione.s41.xrea.com/pukiwiki/index.php?OOoBasic/Macros/MRI/Documentation/Tips

・コマンド URL 一覧

  http://hermione.s41.xrea.com/pukiwiki/index.php?OOoBasic%2FGeneric%2Fcommands_2.3.0

以上です。

補足

この文書は、LibreOffice Writer で作成したものを、ハイブリッド PDF で公開します。

PDF として閲覧が可能なほか、LibreOffice Writer で開けば、「ナビデーター(F5)」

や「スタイルと書式設定(F11)」を見ることで、「見出し」や「スタイル」が適用して

あることが確認していただけると思います。そちらもぜひ参考にしてください。

ライセンスこの文書は「CC BY-SA」で公開します。

筆者:那谷 進

- 15 -