この記事は LibreOffice Advent Calendar 2014 の17日目です。
前のエントリで LibreOffice SDK で読み書きするとこまでやりましたので、ついでにDBに入れるとこまでやってみようか、という流れで作ってみました。
DBの更新を伴う処理の開発・デバッグ時に、データ入れて、動かして、また元に戻して、という作業を楽に繰り返すために主に使ってます。
必要なもの
- LibreOffice
- LibreOffice SDK
- JDK 7
- MySQL JDBC ドライバ
使い方
config.json で JDBC URL, ユーザ名、パスワードを設定して、
soymilk_ods.bat 内でプログラムのパス、クラスパスの指定などを修正して、
mysql-connector-java-*.jar をスクリプトと同じフォルダに置いて、
こんな内容の tables.ods(ファイル名は任意)を用意して
soymilk_ods.bat tables.ods
で実行します。
使い方の補足
- 1シートが1テーブルに対応。
- シート名が "#" で始まるシートは無視される。その点を除けばシート名は任意。
- セルの書式はすべて「テキスト」にしておく。
- 図形、画像などは無視される。
良かったところ
- 使い慣れた LibreOffice Calc でデータを編集できる
- 複数テーブルのデータを1ファイルにパッケージして管理できる
ここらへんは最初から考えながら作りました。良いと思います。
あとは、このファイル作っとけば他の資料とかに(枠線や文字色などの装飾も含めて)そのままコピペできて便利。
その他
上の図では説明のためいろいろと書きこんだり装飾したりしてますが、動作に最低限必要なのは
- テーブルの物理名
- 列の物理名
- 行・列の開始位置の指定
- データ本体
だけで、他の部分は人間が見るための飾りです。
なので、特に飾る必要がない場合はこんなんでOK。
odsファイルを中間形式(オレオレTSV)にダンプする dump_ods.js (1) とダンプされた中間形式のデータをDBに入れる import.js (2) の2つに別れています。
- (1) ではodsファイルを開いて内容を読むために LibreOffice SDK を使っています。
- (2) で中間形式ファイルを読み、テーブルごとに全件削除し、INSERT文を組み立ててJDBCで実行しているだけです。型変換もRDBMS側の暗黙の型変換におまかせ。
動作確認した環境・バージョン
- Windows 7
- LibreOffice_4.2.5_Win_x86.msi
- LibreOffice_4.2.5_Win_x86_sdk.msi
- Java 7 … Pleiades 附属の JDK がすでに入っていたのでそれを使用
- mysql-connector-java-5.1.33.jar
Ubuntu 14.04 でも動作確認できたので Bashスクリプト(拡張子なしの dump_ods)もリポジトリに入れておきました。
動かすときに必要なパッケージはこっちのエントリに書いてます。
jrunscript/RhinoでLibreOffice Calcのセルの読み書き(ついでにxls,xlsxも)