1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

LibreOffice Extensionの作成手順

Last updated at Posted at 2023-04-25

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

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?