楽ちんな LibreOffice Extension の作り方
2014年12月20日 公開の記事の焼き直しです。
この記事は、「LibreOffice Advent Calendar 2014」のために書かれました。
初心者でも拡張機能を作りやすいように手順をまとめておきます。
備忘録とも言います。
ここでは、自作の雛形をご用意しました。
雛形へのリンク
http://tanaka-cs.co.jp/download/TblFrm1.1.oxt
このサンプル拡張機能をダウンロードして、拡張子を .zip に変更、
展開して、中身を見るとこんなファイル構成になっています。
$ tree
.
├── META-INF
│ └── manifest.xml
├── TblFrm
│ ├── Dialog1.xdl
│ ├── Module1.xba
│ ├── TblFrm.xcu
│ ├── dialog.xlb
│ └── script.xlb
└── images
└── icon.png
これらの雛形を使って、 .oxt ファイルを作ってみましょう。
マクロとして機能を作成
初心者に敷居が低くて情報量の多い LibreOffice Basic で作ってみます。
「ツール」ー「マクロ」ー「マクロの管理」ー「LibreOffice Basic」をメニューから選択します。
「マイマクロ」を選択し、「管理」をクリックします。
マクロの管理ダイアログで、「ライブラリ」タグを選択します。
「新規作成」をクリックします。
ライブラリ名を入力します。ここでは「hogehoge」と仮定して進めます。
「hogehoge」ライブラリを選択した状態で「編集」をクリックします。
必要な処理を書きます。
情報はGoogle先生に聞けば沢山あります。
ここでは、以下のようにしました。
REM ***** BASIC *****
Sub Main
Dim oDoc As Object, oText As Object
oDoc = ThisComponent
oController = oDoc.getCurrentController()
oViewCursor = oController.getViewCursor()
oViewCursor.setString(Date & " " & Time)
End Sub
このサンプルは、現在の日付と時刻をWriter文書に挿入します。
デバッグのために、LibO文書側に実行ボタンを配置する方法が楽ちんです。
「表示」ー「ツールバー」で「フォームコントロール」を表示して、
ボタン(OKアイコン)を配置して右クリックして「コントロール」で
属性ダイアログを配置して、イベント「実行時」に、マクロを割り当てます。
フォームコントロールツールバーで、デザインモードをオフにすると
実行出来るようになります。
デバッグが完了したら、拡張機能としてインストール出来るようにします。
以下のような手順になります
マクロ編集画面を保存して閉じておく。
「ツール」ー「マクロ」ー「マクロの管理」ー「LibreOffice Basic」をメニューから選択。
出てきたダイアログで「管理」をクリック。
マクロの管理ダイアログで「hogehoge」を選択し、「エクスポート」をクリック
「拡張機能としてエクスポート」を選択して「OK」をクリック
名前をつけて保存する。ここでは「hogehoge」と入力した。
作成された「hogehoge.oxt」の拡張子を .zip に変更して展開する。
$ tree
.
├── META-INF
│ └── manifest.xml
└── hogehoge
├── Module1.xba
├── dialog.xlb
└── script.xlb
上記のようなファイル構成になっています。
これを、雛形フォルダにコピーします。
途中でファイルの置換するか聞かれましたが、今回は置換しませんでした。
置換しなかったのは以下のファイルです。
META-INF/manifest.xml
<?xml version="1.0" encoding="UTF-8"?>
<manifest:manifest>
<manifest:file-entry manifest:full-path="TblFrm/" manifest:media-type="application/vnd.sun.star.basic-library"/>
<manifest:file-entry manifest:full-path="TblFrm/TblFrm.xcu"
manifest:media-type="application/vnd.sun.star.configuration-data"/>
</manifest:manifest>
「TblFrm」を「hogehoge」に置換します。
この時点で、フォルダ構成は以下の通りです。
$ tree
.
├── META-INF
│ └── manifest.xml
├── TblFrm
│ ├── Dialog1.xdl
│ ├── Module1.xba
│ ├── TblFrm.xcu
│ ├── dialog.xlb
│ └── script.xlb
├── hogehoge
│ ├── Module1.xba
│ ├── dialog.xlb
│ └── script.xlb
└── images
└── icon.png
「TblFrm.xcu」を、「hogehoge.xcu」にリネームして「hogehoge」フォルダに移動します。
「TblFrm」フォルダは、もう不要なので削除します。
「hogehoge.xcu」ファイルを編集します。
「jp.co.tanaka-cs.tblfrm」を、固有の名前に置換します。ここでは「test.hogehoge」としました。
「TblFrm」を、「hogehoge」に置換します。
このモジュールはWriter用なので、
「com.sun.star.text.TextDocument」は、そのままにしました。
Calc用なら
「com.sun.star.sheet.SpreadsheetDocument」
Draw用なら
「com.sun.star.drawing.DrawingDocument」
です。他は既存のExtensionを参考にして下さい。
http://extensions.libreoffice.org/
からダウンロードできます。
現時点で、フォルダ構成は以下の通りです。
$ tree
.
├── META-INF
│ └── manifest.xml
├── hogehoge
│ ├── Module1.xba
│ ├── dialog.xlb
│ ├── hogehoge.xcu
│ └── script.xlb
└── images
└── icon.png
これを、zip形式で圧縮します。
拡張子を .oxt に変更します。
これを実行可能かテストしてみます。
注意しなければいけないのは、既にライブラリが存在するために、インストールでエラーが出ることです。
マクロの管理でライブラリ「hogehoge」を削除しておきます。
デバッグの必要がある時は、.xlb ファイルをインポートしてデバッグできます。
「ツール」ー「拡張機能マネージャ」で、作成したExtensionを追加します。
一度Writerを閉じて、再度Writerを開くとツールバーに「hogehoge」が追加されます。
小窓で表示される場合は、任意のツールバーの位置にドラッグ&ドロップしておきましょう。
これで、「hogehoge」ボタンを押す度にWriter文書に現在日時が挿入されます。
もっと楽な方法があったら教えて下さい
よろしくお願いします。
MEMO
ツール・マクロ・マクロの管理・Basic
管理・ライブラリ・エクスポート・形式:拡張機能
という方法があるらしい。。
目黒さんありがとうございます!
メニューに追加するためには、やはり既存の拡張機能を「Zip」に書き換えて・・
というのが必要とのこと。。