LibreOffice

LibreOfficeは、ワープロ、表計算及びプレゼンテーションなどを統合したオフィススイートで、OpenOffice.orgから派生したオープンソースソフトウェアである。

目次

  1. LibreOffice Base
  2. LibreOffice Calc
  3. LibreOffice Basic
  4. API

LibreOffice Basicマクロの使い方とサンプル

OpenOffice/LibreOffice Basicマクロの使い方をサンプルを交えてご紹介します。

LibreOfficeマクロの作り方

OpenOffice.org Basic は、OpenOffice.orgを制御するためのスクリプト言語です。VBAでMicrosoft Officeを制御できるように、OpenOffice.org Basic で OpenOffice.org を制御することができます。OpenOffice.org Basic の文法はVisual Basicとほぼ同じなので、文法についてはVisual Basicの項を参照してください。

OpenOffice.org Basicを編集するには、[ツール] メニューから [マクロ] - [マクロの管理] - [Basic] を選択してクリックします。

LibreOfficeマクロとVBAの違い

OpenOffice.org Basicは、基本的に文法が VBA (Visual Basic for Applications)と同じである。しかし、いくつか相違点もある。以下に OpenOffice.org BasicとVBAの違いを説明する。

ステートメントは大文字と小文字を区別しない

Visual Basicのエディタでは入力されたステートメントがキャピタライズされて、1文字目が大文字、2文字目以降が小文字に整形されます。たとえば、 dim i as integer と入力すると、 Dim i As Integer と整形されます。

OpenOffice.org Basicのエディタではこのような整形は行われません。OpenOffice.org Basicではステートメントの大文字と小文字は区別されないので、大文字で入力しても小文字で入力しても構いません。たとえば、次の文はすべて同じ意味に解釈されます。

プロシージャ引数の参照渡し・値渡しの指定方法の違い

プロシージャへ引数として変数を渡すときの参照渡し・値渡しの指定方法がOpenOffice.org BasicとVisual Basicとで異なります。

呼び出し側からプロシージャへ変数を引数として渡した場合、プロシージャ内で引数の値を変更すると、呼び出し側の変数の値も変わります。これを 参照渡し と呼びます。

呼び出し側からプロシージャへ変数を引数として渡すとき、呼び出し側の変数の値を変更されたくない場合、渡す変数名の前に ByRef 修飾子を付けます。こうすることで、プロシージャ内で引数の値を変更しても、呼び出し側の変数の値が変わることがなくなります。これを 値渡し と呼びます。

Sub Caller
Dim var1 As Integer
Dim var2 As Integer

var1 = 1
var2 = 1

Proc(var1, ByRef var2)
'var1の値は2になる
'var2の値は1のまま
End Sub

Sub Proc(para1 As Integer, para2 As Integer)
'para1およびpara2の値は1
para1 = 2
para2 = 2
End Sub

実行時エラーに関する情報

Visual Basicでは、実行時エラーが発生した際にErrオブジェクトに実行時エラーに関する情報が格納される。しかし、OpenOffice.org BasicにはErrオブジェクトは存在しない。Errオブジェクトの代わりに、次の変数を参照することができる。

変数名 意味
Err エラー番号
Error$ エラーの内容
Erl エラーが発生した行番号

実行時エラーが発生した際に、その内容をメッセージボックスで表示するOpenOffice.org Basicコードの例を示す。

Sub ErrorSample
Dim i As Integer

On Error Goto ErrorHandler
i = 0
i = 12 / i
Exit Sub

ErrorHandler:
MsgBox Error$
End Sub

オブジェクトやメソッド、プロパティ名の違い

GUI部品を表すコントロール・オブジェクトや、アプリケーションのドキュメントにアクセスするためのオブジェクトやメソッド、プロパティがOpenOffice.org BasicとVBAでまったく異なります。

OpenOffice.org Basicからドキュメントを開く

文書全体を表すドキュメント・オブジェクトは次の構文で表されます。

ThisComponent
StarDesktop.CurrentComponent

ドキュメント・オブジェクトをObject型またはVariant型の変数に代入して使用することもできます。

Dim oDoc As Object

oDoc = ThisComponent

ThisComponentやStarDesktop.CurrentComponentは、そのときにアクティブなドキュメントを表します。したがって、マクロを実行したドキュメントに限りません。複数のOpenOffice.orgを起動している場合、一方でマクロを実行して、そのマクロ実行中にもう一方のOpenOffice.orgにウィンドウを切り替えると、そこがアクティブなドキュメントになってしまいます。意図せぬ動作を防ぐため、マクロの冒頭でドキュメント・オブジェクトをObject型またはVariant型の変数に代入して使用する方がよいでしょう。

マクロの実行速度を速くする

OpenOffice.org CalcをOpenOffice.org Basicを制御するのは、Microsoft ExcelをVBAで制御するのより実行速度がだいぶ遅いです。少しでもマクロの実行速度を上げるための手法を示します。

画面の更新を抑制する

マクロの実行過程の間にもCalcではセルの再表示が行われています。たとえば、マクロでひとつのセルに値を設定したら、そのセルの表示が即座に更新されます。また、そのセルを参照して値を決めているセルの表示も更新されます。マクロ実行中に数多くのセルが何度も再表示を行うことになるので、Calcの実行速度が遅くなります。

マクロ実行中に途中経過を見る必要がなければ、画面表示の更新を抑制することができます。画面表示の更新を抑制するには、addActionLockメソッドを使用する。

画面表示の更新を抑制してからさまざまな処理を行い、処理が終わったら画面表示の更新の抑制を解除すれば、その間の再表示が行われない分、実行速度が速くなります。

画面表示の更新の抑制を解除するには、removeActionLockメソッドを使用する。

画面表示の更新が抑制されているかどうかは、isActionLockedメソッドで知ることができる。

LibreOffice Basicでダイアログを作成する

ダイアログやテキストボックス、リストボックス等のGUI部品を制御するために、OpenOffice.org Basicでは、これらのGUI部品をコントロール・オブジェクトとして表します。

ダイアログ・コントロール (stardiv.Toolkit.UnoDialogControl)

OpenOffice.org Basicでダイアログを表示する例を次に示します。

Dim Private oDialog1 As Object

Sub Dialog1Show
BasicLibraries.LoadLibrary("Tools")
oDialog1 = LoadDialog("Standard", "Dialog1")
oDialog1.Execute()
End Sub

ダイアログを終了する例を次に示します。

Sub Dialog1End
oDialog1.endExecute()
End Sub

OKボタンをクリックしたときのイベントに Dialog1End を割り当てます。

コントロール・オブジェクトを取得するには、GetControlを使用します。

Dim oListBox1 As Object
oListBox1 = oDialog1.GetControl("ListBox1")

ダイアログ・コントロールのプロパティ一覧を次に示します。

ダイアログ・コントロールのプロパティ
名前 種類
Menubar Object(配列)
Title String
Types Object(配列)
ImplemnetationId Integer(配列)
TabControllers Object(配列)
Controls Object(配列)
StatusText String
ElementType Object
Identifiers Long(配列)
Context Object
Peer Object
Model stardiv.Toolkit.UnoControlDialogModel
View stardiv.Toolkit.UnoDialogControl
DesignMode Boolean
PosSize com.sun.star.awt.Rectangle
OutputSize com.sun.star.awt.Size
Visible Boolean
Enable Boolean
Graphics Object
Size com.sun.start.awt.Size
ImplementationName String
SupportedServiceNames String(配列)
AccessibleContext com.sun.start.comp.toolkit.AccessibleDropDownListBox
Delegator Object

番号フィールド

番号フィールドはテキストフィールドと似ていますが、数値だけが入力できるフィールドです。

番号フィールド・コントロールのプロパティ一覧を次に示します。

番号フィールド・コントロールのプロパティ
名前 種類
Value Double

番号フィールドに入力された数値は Value プロパティで参照することができます。

Dim oDialog As Object
Dim oNumericField As Object
Dim dPeriod As Double

BasicLibraries.LoadLibrary("Tools")
oDialog = LoadDialog("Standard", "Dialog1")
oDialog.Execute()

oNumericField = oDialog.GetControl("NumericField1")
dPeriod = oNumericField.Value

チェックボックス

チェックボックス・コントロールのプロパティ一覧を次に示します。

チェックボックス・コントロールのプロパティ
名前 種類
State Integer

チェックボックスが選択されているかどうかは State プロパティを参照することで判断できます。

State プロパティ
意味
0 選択されていない
1 選択されている

ラジオボタン・コントロール (stardiv.Toolkit.UnoRadioButtonControl)

ラジオボタン・コントロール(オプションボタン)はチェックボックスに似ていますが、グループのうちひとつしか選択できません。あるラジオボタンを選択すると、その他のラジオボタンはすべて選択されない状態となります。

ラジオボタンが選択されているかどうかは、Stateプロパティで判断することができます。StateプロパティはBoolean型で、TrueまたはFalseのいずれかの値です。Stateプロパティの値がTrueの場合は、ラジオボタンが選択されている状態です。Stateプロパティの値がFalseの場合は、ラジオボタンが選択されていない状態です。

OpenOffice.org Basicでラジオボタンを使用する例を次に示します。

Dim oDialog As Object
Dim oOptionButton As Object

BasicLibraries.LoadLibrary("Tools")
oDialog = LoadDialog("Standard", "Dialog1")
oDialog.Execute()

oOptionButton = oDialog.GetControl("OptionButton1")
If oOptionButton.State = True Then
  ' ボタンが選択されているときの処理
Else
  ' ボタンが選択されていない時の処理
End If

リストボックス・コントロール (stardiv.Toolkit.UnoListBoxControl)

リストボックス・コントロールのプロパティ一覧を次に示します。

リストボックス・コントロールのプロパティ
名前 種類
Types Object(配列)
ImplemnetationId Integer
ItemCount Integer
Items String(配列)
SelectedItemPos Integer
SelectedItemsPos Integer(配列)
SelectedItem String
SelectedItems String(配列)
DropDownLineCount Integer
MultipleMode Boolean
MimimumSize com.sun.star.awt.Size
PreferredSize com.sun.star.awt.Size
Context stardiv.Toolkit.UnoDialogControl
Peer Object
Model stardiv.Toolkit.UnoControlListBoxControl
View stardiv.Toolkit.UnoListBoxControl
DesignMode Boolean
PosSize com.sun.star.awt.Rectangle
OutputSize com.sun.star.awt.Size
Visible Boolean
Enable Boolean
Graphics Object
Size com.sun.start.awt.Size
ImplementationName String
SupportedServiceNames String(配列)
AccessibleContext com.sun.start.comp.toolkit.AccessibleDropDownListBox
Delegator Object

単一選択リストボックスの場合、選択された項目の文字列はSelectedItemプロパティで参照することができます。選択された項目の位置(数値)はSelectedItemPosプロパティで参照することができます。

複数選択リストボックスの場合、選択された項目の文字列はSelectedItemsプロパティで参照することができます。選択された項目の位置(数値)はSelectedItemsPosプロパティで参照することができます。

ボタンがクリックされたらマクロを実行する

ダイアログ・コントロールにイベントを割り当てると、ボタンをクリックしたときなどにOpenOffice Basicのプロシージャを実行することができる。

ダイアログ・コントロールにイベントを割り当てる手順を次に示す。

  1. プロシージャを作成する。
  2. ダイアログ・コントロールのプロパティを表示させる。
  3. [イベント] タブをクリックする。
  4. 割り当てたいイベントの [...] ボタンをクリックする。
  5. [割り当てられたアクション] ダイアログボックスが表示されるので、[マクロ] ボタンをクリックする。
  6. [マクロの選択] ダイアログボックスが表示されるので、OpenOffice Basicのプロシージャを指定する。

ダイアログ・コントロールのイベント一覧を次に示す。

ダイアログコントロールのイベント
イベント 説明
作動時 ダイアログ・コントロールが作動したときに発生するイベント。
コマンドボタンであれば、(マウスまたはキーボードにより)ボタンが押されたとき。
フォーカスを得た時 マウスクリックまたはタブキーが押されてフォーカスを得たときに発生するイベント。
フォーカスを失った時 マウスクリックまたはタブキーが押されてフォーカスを失ったときに発生するイベント。
キーを押した時 ダイアログ・コントロールにフォーカスがあるときに、何らかのキーが押されたら発生するイベント。
コマンドボタンの場合、スペースキー(ボタンを押す)だけでなくタブキー(フォーカスの移動)が押されてもイベントが発生するので注意。
キーを離した時 ダイアログ・コントロールにフォーカスがあるときに、何らかのキーが押されたらに発生するイベント。
マウスを中に入れた時 マウスカーソルをダイアログ・コントロール内に入れたときに発生するイベント。
マウスボタンを押した時 マウスボタンが押されたら発生するイベント。
マウスボタンを離した時 マウスボタンを離したら発生するイベント。
マウスを外に出した時 マウスカーソルをダイアログ・コントロール内から外に出したときに発生するイベント。