Microsoft Excelとの互換性がある(ただし完全ではない)、それがLibreOfficeのCalc であると。どうもボクです。
サーバサイドで単体テストなんかでExcelのデータと連携したいあるあるですよね。
ということで、今回は、LibreOfficeのCalc とサーバサイド言語のコラボについて調査してみました。
どんな方法があるのか
Excelなんかだと、
⇧ 上記サイト様がまとめてくださっています。
んで、LibreOfficeについては、
⇧ 上記のスライドで知ったのですが、「LibreOffice API」なるものが存在するらしいですと。
Javaの場合
というか、Javaで使用されるのが最も一般的ということらしいです。
This manual describes how to write programs using the component technology UNO (Universal Network Objects) with OpenOffice.org.
Most examples provided are written in Java. As well as Java, the language binding for C++, the UNO access for OpenOffice.org Basic and the OLE Automation bridge that uses OpenOffice.org through Microsoft's component technology COM/DCOM is described.
Apache OpenOffice Developer's Guide - Apache OpenOffice Wiki
⇧ そして、「UNO(Universal Network Objects)」っていうコンポーネントを使うことで、LibreOfficeを操作できるんだと。
Wikipediaさんにお聞きしてみた。
Universal Network Objects (UNO) はOpenOffice.orgで用いられているソフトウェアコンポーネントである。インターフェース志向であり、LAN内部もしくはインターネット上で単一のコンピュータにおいて、異なるプログラム言語や、オブジェクトモデル、マシンアーキテクチャ間の相互運用性を提供することを目的とする。
UNOは言語バインディングのあるプログラム言語であれば、どの言語からであっても実装もしくはアクセスすることができる。完全なUNO言語バインディングはC++ (コンパイラに依存)やJava、Python、Tcl向けに存在する。またObject REXXに対する作業が現在行われている。アクセスのみが可能なバインディングはStarOffice Basicや、OLE Automation、.NETCommon Language Infrastructure向けに存在する。
⇧ 対応してるサーバサイド言語として、C++、Java、Python、 などと仰っていますね。
LibreOfficeの公式の説明(LibreOffice 6.2 の場合)
The SDK provides a rich set of examples in different programming languages (Java, Python, C++, LibreOffice 6.2 Basic, OLE) to illustrate the use of the API and demonstrate how to benefit from the included word processor, spreadsheet, presentation software, graphics program and database of LibreOffice 6.2.
Uno is the component model of OpenOffice.org. Uno offers interoperability between programming languages, other components models and hardware architectures, either in process or over process boundaries, in the Intranet as well as in the Internet. Unocomponents may be implemented in and accessed from any programming language for which a Uno implementation (AKA language binding) and an appropriate bridge or adapter exists.
The Uno web is organized as described in Uno/Meta/Organization.
Probably most interesting for many people is, what we are currently doing in Uno, which you can find in the efforts area. One of the bigger things is the extension of Binary Unos threading-model.
⇧ よく分からんけども、LibreOffice API ってのが、LibreOfficeの機能をUNO(Universal Network Objects)として、多言語へ提供しているというイメージですかね?
必要なものを準備
JavaでLibreOffice API を使うためには、
- LibreOffice
- LibreOffice SDK
- Java
- 統合開発環境 ← GUIで開発する場合
がパソコンにインストールされていればOKのようです。 統合開発環境としては、Eclipse を使っていきたいと思います。
LibreOfficeがバージョン5系だったので、6系に更新してみました。
インストールしてくれるらしい
んで、
「refreshenv」ってコマンドを実行すれば良いと。
んで、環境変数はというと...
⇧ 設定されとらんやんけ~!soffice.exe の配置してるフォルダまで移動すればコマンドを実行できますが...chocolatey さんよ~頼みますぜ...
残念ながら、環境変数は自分で設定するしか無さそうですね...
LibreOfficeのインストール自体は成功し、最新になったらしい。
「C:\Program Files\LibreOffice\program\scalc.exe」を実行で、LibreOffice Calc(Microsoft Office の Excel に相当)を起動。
「ヘルプ(H)」>「LibreOffice について」で、バージョンが確認できました。
■LibreOffice SDK
chocolatey でインストールできるパッケージに存在しないので、LibreOfficeの公式サイトからインストーラーをインストールで。
https://ja.libreoffice.org/download/libreoffice/ にアクセスし、
「LibreOffice_6.2.3_Win_x64_sdk.msi」をダウンロード。
ダウンロードしたインストーラーを起動。ダブルクリックで起動できるかと。
「Next >」で。
2019年5月12日(日)追記 ↓ ここから
なんか、インストール先ですが、
In this window you will have to configure the path to your OpenOffice.org and to its SDK. So, let us begin with the SDK path: click on the Add button next to the SDKs list. You will have a window like the one shown in following illustration. Browse to your OpenOffice.org 2.0 SDK and validate. Then you will have to do the same for the OpenOffice.org path using the other Add button.
Note that a URE installation can be selected instead of a complete OpenOffice.org installation. Please refer to the Java URE application tutorial for more details on the plugin's URE support.
If you are using Windows, please make sure that the path to the SDK does not contains any spaces. Spaces in the path can cause problems when you build your UNO projects.
⇧ Eclipse と連携する場合、SDKのパスにはスペースを含めるなって言ってますね...なのに、デフォルトのインストール先にスペースを含むパスが指定されてるインストーラーってどうなの...
2019年5月12日(日)追記 ↑ ここまで
「Next >」で。(インストール先は特に変更してません。)
「Install」で。
インストールが始まります。
「Finish」で。
インストールされました。
■Java
インストール済みなので、インストールについてなどは割愛。インストールされてない方は、他サイト様を参考にインストールしてみてください。
バージョンが表示されれば、JavaのインストールはOKかと。
Eclipseについてもインストール済みなので割愛。インストールされてない方は、他サイト様を参考にインストールしてみてください。
LibreOffice API を試してみる
とりあえず、Eclipseで試していきたいと思うので、LibreOffice SDKに同梱されてるExampleでJava用の見本が用意されてるので、
⇧ この子たちを使っていこうと。
んで、Eclipseにプロジェクトをインポートする際に、一括でプロジェクトをインポートできないらしい。
⇧ 上記サイト様によりますと、Eclipseのプラグインでイケるらしいとのことですが、そのプラグインが、2004年(最終更新が2004-05-23)で止まってしまっていると...
⇧ 上記サイト様によりますと、1つのディレクトリにプロジェクト全部ぶちこめば一括インポートできるらしい。
どうせ、1つのディレクトリにまとめるなら、「SVN」や「Git」なんかのバージョン管理ツールを使用してプロジェクトを管理していこうと。
なので、今回は、Git を使っていこうかと。なので、GitとTortoiseGit がインストールされてる体で進めて参りますので、インストールされてない方は、他サイト様を参考にインストールしてみてください。
ちなみに、
⇧ 上記サイト様によりますと、Eclipseのワークスペース内にgitリポジトリを置くのはNGらしいです。
ということで、「C:\Program Files\LibreOffice\sdk\examples\java」に、gitリポジトリ作成で。
よく分からんけども、non-bare で。
「bare」「non-bare」 については、
⇧ 上記サイト様が詳しいです。
で、エラー。
⇧ なんか、Cドライブ配下だと駄目なんすかね?UAC(ユーザーアカウント制御、User Account Control)とか関係してるのかと思ったのですが、
⇧ 上記サイト様によりますと、別の要因がありそうな感じですかね。
ということで、デスクトップにディレクトリ作成で。
⇧ イケました。
Eclipseのワークスペース用のディレクトリを適当に作成。
そしたらば、Eclipseを起動で。
「ワークスペース(W):」に、さきほど作成したものを指定。
んで、「ファイル(F)」>「インポート(I)...」で。
「Git」>「Git からプロジェクト」で。
「既存ローカル・リポジトリー」を選択し、「次へ(N) >」で。
「追加(A)...」で。
「完了(F)」で。
「次へ(N) >」で。
「一般的なプロジェクトしてインポート(G)」にチェックし、「次へ(N) >」で。
「完了(F)」で。
インポートされました。
⇧ 「?」マークが付いているのは、
プロジェクトエクスプローラを見ると、ファイル名に「?(はてなマーク)」と「>(不等号記号)」が付いているのが分かります(「?」はコミットやステージングエリアへの追加などが未実施であることを表し、「>」はディレクトリ上の変更がローカルリポジトリに反映されていないことを表します)
Eclipse 上のプロジェクトを GitHub・Bitbucket などのサービスにアップする方法 | Snagimo
⇧ 上記サイト様によりますと、コミットなんかをまだ一回もしてないからということらしいので、気にしなくても良さそうです。
だが、しかし!
Java プロジェクトとして認識されとらんのか、main メソッドのあるJavaファイルの実行で、
⇧ 「Javaアプリケーションの実行」が選択肢として出てこない...
⇧ 上記サイト様によりますと、git あるあるらしい...
⇧ 上記サイト様によりますと、「構成」>「ファセット・フォームへ変換...」でいけるらしい。
んで、どれにチェックを?
⇧ 上記サイト様を参考にさせていただくと、今回は、Javaプロジェクトなので、Javaにだけチェックすれば良いかと。
無事、Javaプロジェクトとして認識されました。
駄目でした...。
⇧ Javaファイルは、srcフォルダの配下にないと駄目みたいですね。
というわけで、
srcに移動で。
F5 でEclipse を更新すると、
エラーの嵐。「ビルド・パス」の設定をしないとならんらしい。
「ライブラリー(L)」タブで、「外部 JAR の追加(X)...」を選択。
「C:\Program Files\LibreOffice\program\classes」配下のjarファイルをすべて選択。
「Apply and Close」で。
エラーが消えず...
なんてこった...srcフォルダに配置したから、フォルダ名がパッケージとして認識されてしまうのね...
「ファセット・フォームへ変換」をフォルダごとにやんなければ駄目そうですね...それぞれのフォルダをJavaプロジェクトにせねばという...面倒くさ。
一旦、この状態のフォルダ構成に。
プロジェクト・ファセットをもとに戻す方法は、なんか無さ気なので、できてしまった「.project」ファイルを編集するしかないと。
⇧ こうすると、Javaプロジェクトとして認識されなくなるので。Eclipse側で、「F5」で更新すると。
で、他のフォルダはそもそもプロジェクト化されてないんで、1つづつプロジェクト化するしかないかと...。Gradle とかビルドツールを使えば、何か一括で全プロジェクト化とかできるのかもしらんけど、やり方が分からんす...
「Java」>「Java プロジェクト」を選択し「次へ(N) >」で。
「デフォルト・ロケーションを使用(D)」のチェックを外し、「参照(R)...」をクリック。
「C:\Users\Toshinobu\Desktop\testLibreApi\Spreadsheet」 にしてみました。
「次へ(N) >」で。
「完了(F)」で。
「パースペクティブを開く(O)」で。
んで、Javaプロジェクトになったので、ライブラリを追加せねば。
んで、エラーが残ると...
「org.openoffice.sheet.addin.XCalcAddins」が見つからんって言われてもね...
⇧ 上記サイト様でも同様のエラーが...って、2004年から解消されてないの?これ!
衝撃なんですけど...
っていうか、Exampleで動かんやつ置かれても困るわ...15年間変わらずって...
他は動きました。
何ていうか、情報が少ないのもそうだけど、15年同じ問題を放置し続けるって...LibreOffice APIって、なんかオワコン的な状態なのかしら...
まぁ、今日も時間を無駄にしてしまった...
今回はこのへんで。