LibreOffice Extensionの作成手順

# 楽ちんな 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

---------------------------------------------------------
```: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」に書き換えて・・
というのが必要とのこと。。