SlideShare ist ein Scribd-Unternehmen logo
1 von 15
Downloaden Sie, um offline zu lesen
”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 の指定 と マクロの記録を有効にする
マクロの記録先
さっそくマクロを作っていき
ましょう。 まずは 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: マクロの記録先
 モジュールを新規作成すると、空(カラ)の「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!
関数の仕様を調べる
 さて、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 ヘルプ
その他の関数の調べかた
 ヘルプを見ると、他にもたくさんの組み込み関数があるのが見えたと思います。例えば、「小数点
以下を四捨五入したい、切り捨てたい」とか、「商の余りを求めたい」とか、「小文字を大文字にし
たい」というような場合に、どの関数を使ったらいいのかを調べるには、「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 はセルでも使える
 まず、実際に変数を使ってみましょう。「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 -
変数のクラス 内容 宣言の例
数値 整数(-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: オブザーバーウィンドウで変数の変遷を観察
配列とは
 いくつかの変数をまとめて扱いたい場合に、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 -
条件判定ステートメント
 例として、「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 If
End 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) )
Next
End Sub
ジャンプ(移動)
 例として、「On Error GoTo ...Resume」ステートメントを使ってみましょう。
これは、「マクロとプログラミング -> コマンドリファレンス -> 実行時関数、ステートメント、演算子 ->
エラーを制御するための関数」に分類されています。
- 9 -
Sub Main
On Error GoTo ErrorHandler
Error(1)'Error 関数で、あえてエラーを発生させます。
Exit Sub
ErrorHandler:
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 Main
ThisComponent.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 -
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 Main
Globalscope.BasicLibraries.LoadLibrary( "MRILib" )
mri ThisComponent
End Sub
 さらに、オブザーバーで「ThisComponent」をウォッチして、どういう構造になっているか見てみる
と、参考になるでしょう。
- 11 -
図 9: MRI オブジェクトブラウザ
マクロの記録
 「ツール -> マクロ -> マクロの記録」とたどれば、停止ボタンを押すまでの間、マウスやキーボー
ドでの操作を「記録」して、自動的にマクロにしてくれます。しかし「マクロの記録」で生成されるマ
クロコードは、ちょっと独特です。試しに、セル A1 が選択されている状態から「マクロの記録」を初
- 12 -
図 10: マクロ内で MRI を呼び出す
めて、「セル B3 を選択」して、「文字列”LibreOffice”と入力」して、「Enter を押下してひとつ下のセ
ルに移動」して、そこで「記録の終了」を押下しましょう。マクロの保存先を聞かれますので、「マク
ロの練習.ods -> Standard -> Module1 -> Main」として「保存」ボタンをクリックします。上書きするの
かと聞かれますので、「はい」としましょう。以下のようなマクロコードが記録されたと思います。
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 -----------------------------------------------「セル B3 を選択」----
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(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.PropertyValue
args2(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 -
 このことについても、やはり先ほどのサイトに、とても詳しく、わかりやすく説明されています。
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_1SpreadsheetDocu
ment.html
・SpreadsheetDocumentSettings
http://api.libreoffice.org/docs/idl/ref/servicecom_1_1sun_1_1star_1_1sheet_1_1SpreadsheetDocu
mentSettings.html
- 14 -
・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 -

Weitere ähnliche Inhalte

Was ist angesagt?

NFTアートに所有権なんてなかった
NFTアートに所有権なんてなかったNFTアートに所有権なんてなかった
NFTアートに所有権なんてなかったKenta Iwasaki
 
C++ REST SDKを使ってWebサービスを利用する
C++ REST SDKを使ってWebサービスを利用するC++ REST SDKを使ってWebサービスを利用する
C++ REST SDKを使ってWebサービスを利用するYou&I
 
オブジェクト指向できていますか?
オブジェクト指向できていますか?オブジェクト指向できていますか?
オブジェクト指向できていますか?Moriharu Ohzu
 
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのかDDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのかKoichiro Matsuoka
 
モジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェースモジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェースHajime Yanagawa
 
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~infinite_loop
 
[AKIBA.AWS] EC2の基礎 - パフォーマンスを100%引き出すオプション設定 -
[AKIBA.AWS] EC2の基礎 - パフォーマンスを100%引き出すオプション設定 -[AKIBA.AWS] EC2の基礎 - パフォーマンスを100%引き出すオプション設定 -
[AKIBA.AWS] EC2の基礎 - パフォーマンスを100%引き出すオプション設定 -Shuji Kikuchi
 
ビジネスパーソンのためのDX入門講座エッセンス版
ビジネスパーソンのためのDX入門講座エッセンス版ビジネスパーソンのためのDX入門講座エッセンス版
ビジネスパーソンのためのDX入門講座エッセンス版Tokoroten Nakayama
 
大きすぎるフィールドに対応した件
大きすぎるフィールドに対応した件大きすぎるフィールドに対応した件
大きすぎるフィールドに対応した件Haruyuki Nakano
 
2021 09 豆寄席:(公開用)長く生き残るitエンジニアの”リベラル・アーツ”
2021 09 豆寄席:(公開用)長く生き残るitエンジニアの”リベラル・アーツ”2021 09 豆寄席:(公開用)長く生き残るitエンジニアの”リベラル・アーツ”
2021 09 豆寄席:(公開用)長く生き残るitエンジニアの”リベラル・アーツ”Hideo Terada
 
BASEでデータ処理の幅を広げよう
BASEでデータ処理の幅を広げようBASEでデータ処理の幅を広げよう
BASEでデータ処理の幅を広げようkoutarou watanabe
 
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」Masahito Zembutsu
 
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところY Watanabe
 
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)Takuto Wada
 
プログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコードプログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコードShigenori Sagawa
 
強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話Yoshitaka Kawashima
 
本当にあったRailsの怖い話
本当にあったRailsの怖い話本当にあったRailsの怖い話
本当にあったRailsの怖い話Yuto Komai
 
FiNC DDD第一回勉強会
FiNC DDD第一回勉強会FiNC DDD第一回勉強会
FiNC DDD第一回勉強会裕紀 重村
 

Was ist angesagt? (20)

NFTアートに所有権なんてなかった
NFTアートに所有権なんてなかったNFTアートに所有権なんてなかった
NFTアートに所有権なんてなかった
 
C++ REST SDKを使ってWebサービスを利用する
C++ REST SDKを使ってWebサービスを利用するC++ REST SDKを使ってWebサービスを利用する
C++ REST SDKを使ってWebサービスを利用する
 
オブジェクト指向できていますか?
オブジェクト指向できていますか?オブジェクト指向できていますか?
オブジェクト指向できていますか?
 
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのかDDDのモデリングとは何なのか、 そしてどうコードに落とすのか
DDDのモデリングとは何なのか、 そしてどうコードに落とすのか
 
モジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェースモジュールの凝集度・結合度・インタフェース
モジュールの凝集度・結合度・インタフェース
 
Tackling Complexity
Tackling ComplexityTackling Complexity
Tackling Complexity
 
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
 
[AKIBA.AWS] EC2の基礎 - パフォーマンスを100%引き出すオプション設定 -
[AKIBA.AWS] EC2の基礎 - パフォーマンスを100%引き出すオプション設定 -[AKIBA.AWS] EC2の基礎 - パフォーマンスを100%引き出すオプション設定 -
[AKIBA.AWS] EC2の基礎 - パフォーマンスを100%引き出すオプション設定 -
 
ビジネスパーソンのためのDX入門講座エッセンス版
ビジネスパーソンのためのDX入門講座エッセンス版ビジネスパーソンのためのDX入門講座エッセンス版
ビジネスパーソンのためのDX入門講座エッセンス版
 
大きすぎるフィールドに対応した件
大きすぎるフィールドに対応した件大きすぎるフィールドに対応した件
大きすぎるフィールドに対応した件
 
2021 09 豆寄席:(公開用)長く生き残るitエンジニアの”リベラル・アーツ”
2021 09 豆寄席:(公開用)長く生き残るitエンジニアの”リベラル・アーツ”2021 09 豆寄席:(公開用)長く生き残るitエンジニアの”リベラル・アーツ”
2021 09 豆寄席:(公開用)長く生き残るitエンジニアの”リベラル・アーツ”
 
BASEでデータ処理の幅を広げよう
BASEでデータ処理の幅を広げようBASEでデータ処理の幅を広げよう
BASEでデータ処理の幅を広げよう
 
コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」コンテナの作り方「Dockerは裏方で何をしているのか?」
コンテナの作り方「Dockerは裏方で何をしているのか?」
 
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
 
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
 
プログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコードプログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコード
 
強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話
 
マーブル図で怖くないRxJS
マーブル図で怖くないRxJSマーブル図で怖くないRxJS
マーブル図で怖くないRxJS
 
本当にあったRailsの怖い話
本当にあったRailsの怖い話本当にあったRailsの怖い話
本当にあったRailsの怖い話
 
FiNC DDD第一回勉強会
FiNC DDD第一回勉強会FiNC DDD第一回勉強会
FiNC DDD第一回勉強会
 

Andere mochten auch

LibreOffice API について
LibreOffice API についてLibreOffice API について
LibreOffice API について健一 辰濱
 
LibreOffice Base をSQLite のフロントエンドにしてみよう
LibreOffice Base をSQLite のフロントエンドにしてみようLibreOffice Base をSQLite のフロントエンドにしてみよう
LibreOffice Base をSQLite のフロントエンドにしてみよう78tch
 
LibreOffice導入へのアドバイス
LibreOffice導入へのアドバイスLibreOffice導入へのアドバイス
LibreOffice導入へのアドバイスkoutarou watanabe
 
LibreOffice拡張機能 TeXMathsの紹介
LibreOffice拡張機能 TeXMathsの紹介LibreOffice拡張機能 TeXMathsの紹介
LibreOffice拡張機能 TeXMathsの紹介hibagonsan
 
高校教科「情報」におけるLibreOfficeの適用可能性検討
高校教科「情報」におけるLibreOfficeの適用可能性検討高校教科「情報」におけるLibreOfficeの適用可能性検討
高校教科「情報」におけるLibreOfficeの適用可能性検討Jun Iio
 
LibreOffice導入のポイント10
LibreOffice導入のポイント10LibreOffice導入のポイント10
LibreOffice導入のポイント10koutarou watanabe
 
「ワープロソフト」のセオリーを押さえよう! Writer 編
「ワープロソフト」のセオリーを押さえよう! Writer 編「ワープロソフト」のセオリーを押さえよう! Writer 編
「ワープロソフト」のセオリーを押さえよう! Writer 編78tch
 
Libre office カスタマイズ
Libre office カスタマイズLibre office カスタマイズ
Libre office カスタマイズMiyoshi Omori
 
文系ITエンジニア育成教育におけるRubyの活用
文系ITエンジニア育成教育におけるRubyの活用文系ITエンジニア育成教育におけるRubyの活用
文系ITエンジニア育成教育におけるRubyの活用Jun Iio
 
Webブラウザで動くOSSオフィスソフト、LibreOffice Onlineの中身に迫る / LibreOffice Online Implementa...
Webブラウザで動くOSSオフィスソフト、LibreOffice Onlineの中身に迫る / LibreOffice Online Implementa...Webブラウザで動くOSSオフィスソフト、LibreOffice Onlineの中身に迫る / LibreOffice Online Implementa...
Webブラウザで動くOSSオフィスソフト、LibreOffice Onlineの中身に迫る / LibreOffice Online Implementa...Naruhiko Ogasawara
 
React.jsでクライアントサイドなWebアプリ入門
React.jsでクライアントサイドなWebアプリ入門React.jsでクライアントサイドなWebアプリ入門
React.jsでクライアントサイドなWebアプリ入門spring_raining
 
今からでも遅くない! React事始め
今からでも遅くない! React事始め今からでも遅くない! React事始め
今からでも遅くない! React事始めynaruta
 

Andere mochten auch (12)

LibreOffice API について
LibreOffice API についてLibreOffice API について
LibreOffice API について
 
LibreOffice Base をSQLite のフロントエンドにしてみよう
LibreOffice Base をSQLite のフロントエンドにしてみようLibreOffice Base をSQLite のフロントエンドにしてみよう
LibreOffice Base をSQLite のフロントエンドにしてみよう
 
LibreOffice導入へのアドバイス
LibreOffice導入へのアドバイスLibreOffice導入へのアドバイス
LibreOffice導入へのアドバイス
 
LibreOffice拡張機能 TeXMathsの紹介
LibreOffice拡張機能 TeXMathsの紹介LibreOffice拡張機能 TeXMathsの紹介
LibreOffice拡張機能 TeXMathsの紹介
 
高校教科「情報」におけるLibreOfficeの適用可能性検討
高校教科「情報」におけるLibreOfficeの適用可能性検討高校教科「情報」におけるLibreOfficeの適用可能性検討
高校教科「情報」におけるLibreOfficeの適用可能性検討
 
LibreOffice導入のポイント10
LibreOffice導入のポイント10LibreOffice導入のポイント10
LibreOffice導入のポイント10
 
「ワープロソフト」のセオリーを押さえよう! Writer 編
「ワープロソフト」のセオリーを押さえよう! Writer 編「ワープロソフト」のセオリーを押さえよう! Writer 編
「ワープロソフト」のセオリーを押さえよう! Writer 編
 
Libre office カスタマイズ
Libre office カスタマイズLibre office カスタマイズ
Libre office カスタマイズ
 
文系ITエンジニア育成教育におけるRubyの活用
文系ITエンジニア育成教育におけるRubyの活用文系ITエンジニア育成教育におけるRubyの活用
文系ITエンジニア育成教育におけるRubyの活用
 
Webブラウザで動くOSSオフィスソフト、LibreOffice Onlineの中身に迫る / LibreOffice Online Implementa...
Webブラウザで動くOSSオフィスソフト、LibreOffice Onlineの中身に迫る / LibreOffice Online Implementa...Webブラウザで動くOSSオフィスソフト、LibreOffice Onlineの中身に迫る / LibreOffice Online Implementa...
Webブラウザで動くOSSオフィスソフト、LibreOffice Onlineの中身に迫る / LibreOffice Online Implementa...
 
React.jsでクライアントサイドなWebアプリ入門
React.jsでクライアントサイドなWebアプリ入門React.jsでクライアントサイドなWebアプリ入門
React.jsでクライアントサイドなWebアプリ入門
 
今からでも遅くない! React事始め
今からでも遅くない! React事始め今からでも遅くない! React事始め
今からでも遅くない! React事始め
 

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

メタプログラミングってなに?
メタプログラミングってなに?メタプログラミングってなに?
メタプログラミングってなに?KazukiWata
 
Scala による自然言語処理
Scala による自然言語処理Scala による自然言語処理
Scala による自然言語処理Hiroyoshi Komatsu
 
現在のWebフロントエンドの現状と愚痴と、それに対するHaxeフロントエンドライブラリMageについて
現在のWebフロントエンドの現状と愚痴と、それに対するHaxeフロントエンドライブラリMageについて現在のWebフロントエンドの現状と愚痴と、それに対するHaxeフロントエンドライブラリMageについて
現在のWebフロントエンドの現状と愚痴と、それに対するHaxeフロントエンドライブラリMageについてNobukazu Hanada
 
Scala の関数型プログラミングを支える技術
Scala の関数型プログラミングを支える技術Scala の関数型プログラミングを支える技術
Scala の関数型プログラミングを支える技術Naoki Aoyama
 
オブジェクト指向開発におけるObject-Functional Programming
オブジェクト指向開発におけるObject-Functional Programmingオブジェクト指向開発におけるObject-Functional Programming
オブジェクト指向開発におけるObject-Functional ProgrammingTomoharu ASAMI
 
関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)啓 小笠原
 
誰も教えてくれない、Excelマクロ/VBAの使い方 先生:田中亨(Office TANAKA)
誰も教えてくれない、Excelマクロ/VBAの使い方 先生:田中亨(Office TANAKA)誰も教えてくれない、Excelマクロ/VBAの使い方 先生:田中亨(Office TANAKA)
誰も教えてくれない、Excelマクロ/VBAの使い方 先生:田中亨(Office TANAKA)schoowebcampus
 
ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計Tadayoshi Sato
 
Web本文抽出 using crf
Web本文抽出 using crfWeb本文抽出 using crf
Web本文抽出 using crfShuyo Nakatani
 
Scalaプログラミング・マニアックス
Scalaプログラミング・マニアックスScalaプログラミング・マニアックス
Scalaプログラミング・マニアックスTomoharu ASAMI
 
Nds meetup8 lt
Nds meetup8 ltNds meetup8 lt
Nds meetup8 ltushiboy
 
ルールベースから機械学習への道 公開用
ルールベースから機械学習への道 公開用ルールベースから機械学習への道 公開用
ルールベースから機械学習への道 公開用nishio
 
括弧への異常な愛情 または私は如何にして心配するのを止めてCommon Lispを愛するようになったか
括弧への異常な愛情 または私は如何にして心配するのを止めてCommon Lispを愛するようになったか括弧への異常な愛情 または私は如何にして心配するのを止めてCommon Lispを愛するようになったか
括弧への異常な愛情 または私は如何にして心配するのを止めてCommon Lispを愛するようになったかm2ym
 
【macOSにも対応】AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」
【macOSにも対応】AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」【macOSにも対応】AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」
【macOSにも対応】AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」fukuoka.ex
 
Object-Funcational Analysis and design
Object-Funcational Analysis and designObject-Funcational Analysis and design
Object-Funcational Analysis and designTomoharu ASAMI
 
Sourcecode Reading Workshop2010
Sourcecode Reading Workshop2010Sourcecode Reading Workshop2010
Sourcecode Reading Workshop2010Hiro Yoshioka
 

Ähnlich wie "Hello World!" から始める Calc で LibreOffice Basic (20)

メタプログラミングってなに?
メタプログラミングってなに?メタプログラミングってなに?
メタプログラミングってなに?
 
Scala による自然言語処理
Scala による自然言語処理Scala による自然言語処理
Scala による自然言語処理
 
現在のWebフロントエンドの現状と愚痴と、それに対するHaxeフロントエンドライブラリMageについて
現在のWebフロントエンドの現状と愚痴と、それに対するHaxeフロントエンドライブラリMageについて現在のWebフロントエンドの現状と愚痴と、それに対するHaxeフロントエンドライブラリMageについて
現在のWebフロントエンドの現状と愚痴と、それに対するHaxeフロントエンドライブラリMageについて
 
Scala の関数型プログラミングを支える技術
Scala の関数型プログラミングを支える技術Scala の関数型プログラミングを支える技術
Scala の関数型プログラミングを支える技術
 
ATN No.2 Scala事始め
ATN No.2 Scala事始めATN No.2 Scala事始め
ATN No.2 Scala事始め
 
オブジェクト指向開発におけるObject-Functional Programming
オブジェクト指向開発におけるObject-Functional Programmingオブジェクト指向開発におけるObject-Functional Programming
オブジェクト指向開発におけるObject-Functional Programming
 
関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)関数型言語&形式的手法セミナー(3)
関数型言語&形式的手法セミナー(3)
 
誰も教えてくれない、Excelマクロ/VBAの使い方 先生:田中亨(Office TANAKA)
誰も教えてくれない、Excelマクロ/VBAの使い方 先生:田中亨(Office TANAKA)誰も教えてくれない、Excelマクロ/VBAの使い方 先生:田中亨(Office TANAKA)
誰も教えてくれない、Excelマクロ/VBAの使い方 先生:田中亨(Office TANAKA)
 
ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計ドメインロジックの実装方法とドメイン駆動設計
ドメインロジックの実装方法とドメイン駆動設計
 
Web本文抽出 using crf
Web本文抽出 using crfWeb本文抽出 using crf
Web本文抽出 using crf
 
Matlab講習2021
Matlab講習2021Matlab講習2021
Matlab講習2021
 
Scalaプログラミング・マニアックス
Scalaプログラミング・マニアックスScalaプログラミング・マニアックス
Scalaプログラミング・マニアックス
 
Scrum alliance regional gathering tokyo 2013 pub
Scrum alliance regional gathering tokyo 2013 pubScrum alliance regional gathering tokyo 2013 pub
Scrum alliance regional gathering tokyo 2013 pub
 
Nds meetup8 lt
Nds meetup8 ltNds meetup8 lt
Nds meetup8 lt
 
ルールベースから機械学習への道 公開用
ルールベースから機械学習への道 公開用ルールベースから機械学習への道 公開用
ルールベースから機械学習への道 公開用
 
括弧への異常な愛情 または私は如何にして心配するのを止めてCommon Lispを愛するようになったか
括弧への異常な愛情 または私は如何にして心配するのを止めてCommon Lispを愛するようになったか括弧への異常な愛情 または私は如何にして心配するのを止めてCommon Lispを愛するようになったか
括弧への異常な愛情 または私は如何にして心配するのを止めてCommon Lispを愛するようになったか
 
Glibc malloc internal
Glibc malloc internalGlibc malloc internal
Glibc malloc internal
 
【macOSにも対応】AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」
【macOSにも対応】AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」【macOSにも対応】AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」
【macOSにも対応】AI入門「第3回:数学が苦手でも作って使えるKerasディープラーニング」
 
Object-Funcational Analysis and design
Object-Funcational Analysis and designObject-Funcational Analysis and design
Object-Funcational Analysis and design
 
Sourcecode Reading Workshop2010
Sourcecode Reading Workshop2010Sourcecode Reading Workshop2010
Sourcecode Reading Workshop2010
 

Kürzlich hochgeladen

新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価sugiuralab
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000Shota Ito
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。iPride Co., Ltd.
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directoryosamut
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxAtomu Hidaka
 
プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールプレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールsugiuralab
 

Kürzlich hochgeladen (7)

新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 
プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価プレイマットのパターン生成支援ツールの評価
プレイマットのパターン生成支援ツールの評価
 
PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000PHP-Conference-Odawara-2024-04-000000000
PHP-Conference-Odawara-2024-04-000000000
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 
20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory20240412_HCCJP での Windows Server 2025 Active Directory
20240412_HCCJP での Windows Server 2025 Active Directory
 
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptxIoT in the era of generative AI, Thanks IoT ALGYAN.pptx
IoT in the era of generative AI, Thanks IoT ALGYAN.pptx
 
プレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツールプレイマットのパターン生成支援ツール
プレイマットのパターン生成支援ツール
 

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

  • 1. ”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 の指定 と マクロの記録を有効にする
  • 2. マクロの記録先 さっそくマクロを作っていき ましょう。 まずは 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: マクロの記録先
  • 3.  モジュールを新規作成すると、空(カラ)の「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!
  • 4. 関数の仕様を調べる  さて、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 ヘルプ
  • 5. その他の関数の調べかた  ヘルプを見ると、他にもたくさんの組み込み関数があるのが見えたと思います。例えば、「小数点 以下を四捨五入したい、切り捨てたい」とか、「商の余りを求めたい」とか、「小文字を大文字にし たい」というような場合に、どの関数を使ったらいいのかを調べるには、「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 はセルでも使える
  • 6.  まず、実際に変数を使ってみましょう。「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 -
  • 7. 変数のクラス 内容 宣言の例 数値 整数(-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: オブザーバーウィンドウで変数の変遷を観察
  • 8. 配列とは  いくつかの変数をまとめて扱いたい場合に、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 -
  • 9. 条件判定ステートメント  例として、「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 If End 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) ) Next End Sub ジャンプ(移動)  例として、「On Error GoTo ...Resume」ステートメントを使ってみましょう。 これは、「マクロとプログラミング -> コマンドリファレンス -> 実行時関数、ステートメント、演算子 -> エラーを制御するための関数」に分類されています。 - 9 -
  • 10. Sub Main On Error GoTo ErrorHandler Error(1)'Error 関数で、あえてエラーを発生させます。 Exit Sub ErrorHandler: 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 Main ThisComponent.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 -
  • 11. 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 Main Globalscope.BasicLibraries.LoadLibrary( "MRILib" ) mri ThisComponent End Sub  さらに、オブザーバーで「ThisComponent」をウォッチして、どういう構造になっているか見てみる と、参考になるでしょう。 - 11 - 図 9: MRI オブジェクトブラウザ
  • 12. マクロの記録  「ツール -> マクロ -> マクロの記録」とたどれば、停止ボタンを押すまでの間、マウスやキーボー ドでの操作を「記録」して、自動的にマクロにしてくれます。しかし「マクロの記録」で生成されるマ クロコードは、ちょっと独特です。試しに、セル A1 が選択されている状態から「マクロの記録」を初 - 12 - 図 10: マクロ内で MRI を呼び出す
  • 13. めて、「セル B3 を選択」して、「文字列”LibreOffice”と入力」して、「Enter を押下してひとつ下のセ ルに移動」して、そこで「記録の終了」を押下しましょう。マクロの保存先を聞かれますので、「マク ロの練習.ods -> Standard -> Module1 -> Main」として「保存」ボタンをクリックします。上書きするの かと聞かれますので、「はい」としましょう。以下のようなマクロコードが記録されたと思います。 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 -----------------------------------------------「セル B3 を選択」---- dim args1(0) as new com.sun.star.beans.PropertyValue args1(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.PropertyValue args2(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 -
  • 14.  このことについても、やはり先ほどのサイトに、とても詳しく、わかりやすく説明されています。 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_1SpreadsheetDocu ment.html ・SpreadsheetDocumentSettings http://api.libreoffice.org/docs/idl/ref/servicecom_1_1sun_1_1star_1_1sheet_1_1SpreadsheetDocu mentSettings.html - 14 -
  • 15. ・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 -