JRubyでLibreOffice Calcのfodsファイルを読み書きするサンプル 2019

以前 JavaScript(Rhino/jrunscript)で書いたものを今さらながら Nashorn 向けに書きなおそうとして調べたところ、非推奨になっていました。

2018-06-07 JavaでJavaScriptを実行する「Nashorn」が非推奨に、ECMAScriptの速い進化に追いつけないと。代替案はGraalVM - Publickey

去年のニュースですね。全然気づいてませんでした。 GraalVM を使えとあり、それも面白そうではありますが時期尚早な感じもします。 ちょっと考えて JRuby で書き直してみることにしました。

sonota88/libreoffice-jruby-sample
https://github.com/sonota88/libreoffice-jruby-sample

Ubuntu で動かす前提のサンプルになっていて、 libreoffice-java-common をインストールしておく必要があります。ライブラリまわりについては一つ前の記事なども参考にしてください。 Windows などでもライブラリのパスの修正だけで動くんじゃないかと思います。

なんかデッドロックが発生してプログラムが終了しなかったのでサンプルスクリプトでは明示的に exit しています。 jstack を使ってデッドロックしているなーというとこまで調べたあたりで気力が尽きました。また気が向いたら調べるかも……。


今回はじめて JRuby を使ってみましたが、 zip をダウンロードして展開して bin/ にパスを通すだけで使えて、いいですね。分かりやすい。

JRuby から Java のライブラリなどを使う場合、下記は必読でした。まずこれを読みましょう。

CallingJavaFromJRuby · jruby/jruby Wiki


次のようにシートをダンプしてくれる dump.rb もおまけで追加しました。 値が入っている最大の行・列の取り方が分からなかったため、いったん100行・100列まで見るようにしました。 サンプルということで許してください……。

$ jruby dump.rb foo.fods {シート名}
["a1", "b1"]
["a2", "b2"]

参考: もっとお手軽な機械可読テキストテーブルフォーマット - memo88