Libre Officeでダイアログアプリを作る
Libre Officeを有効活用する上で、引っかかったのがプログラミングでした。
Microsoft Officeに搭載されているVBAのコードがそのまま動く場合もありますが、100%の稼働は保証されていません。
ならばいっそのこと標準のstar basicを使えるようになろうと考えたのですが、本家VBAと比べて参考資料が少なく苦戦しました。
それでも、PDFファイルをまとめて1つのファイルにするプログラムを完成させることができました。
今回はMicrosoft OfficeでVBAを触ったことがあるぐらいの方を対象に記事を書いています。
本家参考資料
Libre Officeの元となったApache Open Officeのドキュメントとして、日本語でもドキュメントがありますが、テキストボックス等のコントロールは英語版の方が詳しく載っています。
ダイアログの表示とコントロールの取得方法
プログラムコード自体は、trim, msgbox, mid, split等VBAでおなじみのものが使えますが、ダイアログとコントロールの設定が大きく違いVBA経験者の導入障壁となっていると感じました。
ですので、ダイアログを表示してコントロールに関するイベントを実行するところまでを説明したいと思います。
ダイアログを作成するには「ツール」→「マクロ」→「ダイアログの管理」と進みます。
マクロの管理ダイアログの「ダイアログ」タブにフォーカスが当たって表示されると思いますので、現在開いているドキュメント(ここでは無題1)を選択して「新規作成」を押します。
作成するダイアログの名称を入れます。この名前は後から使いますのでわかりやすい名前にしておきましょう。
ダイアログが作成できたら、選択して「編集」を押します。
ダイアログエディタ画面が立ち上がります。下のツールボックスよりコントロールを配置していきます。
ボタンコントロールを配置するとこんな感じです。
VBAではダイアログとプログラムの境界があいまいでしたが、Libere Officeではそれがはっきりしています。プログラムコードはすべてモジュールに記述し、ダイアログからはモジュール内の関数名を指定して起動するようになります。
自動でStandardというフォルダができていますので、ダイアログやモジュールを追加する場合はここに入れます。
モジュールの作成の仕方は「ツール」→「モジュールの選択」でダイアログを開きます。
現在開いているファイル名の中にあるStandardフォルダを選択した状態で「新規作成」を押します。
作成した、モジュールに次のようにコードを記述します。ダイアログを表示するための記述です。左側のツリーから作成したモジュールをダブルクリックするとコード編集画面に移ります。関数名はなんでもいいと思いますが、筆者はデフォルトで用意されているSub Mainに記述しました。
option explicit dim mObjDialog As Object Sub Main DialogLibraries.LoadLibrary("Standard") mObjDialog = CreateUnoDialog(DialogLibraries.Standard.dialogMakePrintData) mObjDialog.Execute() ... mObjDialog.dispose() end Sub
- option explicitは好みの問題ですが、筆者はVBA以上に変数定義のチェックの必要性を感じました。
- dim mObjDialog as Objectはダイアログ用の入れ物です。ダイアログから各コントロールにアクセスするので広域に設定します。
- DialogLibraries.LoadLibrary("Standard")はVBAでは設定しないものです。Standardフォルダ内の読み込みを指定します。
- mObjDialog=CreateUnoDialo(...でダイアログを生成しています。この引数の文字列はDialogLibrariesの後、実際のフォルダ名(Standard)とファイル名(dialogMakePrintData)を指定するようになりますので、それぞれの環境に合わせて設定してください。
- mObjDialog.Execute()で表示します。初期化等はこれより前に行いましょう。ダイアログが表示されている限りこれより先には進みません。
- mObjDialog.dispose()ダイアログが閉じられるとここに来ます。ダイアログを破棄して終了します。
ここまで書いてようやくダイアログが表示できるようになります。マクロの実行から先ほど作成したモジュールの関数を選択するとダイアログが表示されるようになります。
セキュリティの警告がでたら、「オプション」→「セキュリティ」→「マクロのセキュリティ」より設定を変更しましょう。いったんLibre Officeのプログラムを終了させないと反映されません。
コントロールの取り扱い
ダイアログエディタでコントロールを配置するとVBA同様に名前が付けられます。この名前を先にセットしたダイアログオブジェクトに渡すことでコントロールを取得します。
たとえば「txtPaperW」というテキストボックスに「100」という数字を入れたかったら次のようにします。
dim objCnt objCnt = mObjDialog.getControl("txtPaperW") objCnt.setText("100")
この「mObjDialog」はダイアログ作成時に広域になるようにセットしたオブジェクトです。
ボタンが押された際のイベントは、先に関数を記入しておいた後でダイアログエディタから結びつけをします。ボタン押下なら「実行時」の場所にコードをセットします。
ダイアログから取得したコントロールにどんな関数が存在するかは、先の英語版のドキュメントを参考にしてください。