スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

JavaでOpenOffce Calcのシートデータを読む

OpenOffice CalcにDBのデータ内容を書いて、そのシートを読んで自動的にデータをinsertしてくれるツールを作ろうかと思いました。
今作っているアプリのテーブル構造が結構複雑なんで、手で入れるのはちょっとかったるいです。

JavaでExcelのシートのデータを読み込む時にはライブラリとしてpoiがありますが、OpenOffice Calcにはそういったの無いですよね(あるのかな?)
odsファイルって、実はzipの形式でそのなかにあるcontext.xmlにcalcのセルの内容が記述されています。
こいつを読んでみようと思います。

ZipFile zipFile = new ZipFile("test.ods");
ZipEntry zipEntry = zipFile.getEntry("content.xml");
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(zipFile.getInputStream(zipEntry));

これで、Documentが得られたので、あとはXMLを解析するだけです。XMLの解析にはJXPathを使用します。

JXPathContext context = JXPathContext.newContext(document);
Object sheet = context.selectSingleNode(
"/office:document-content/office:body/office:spreadsheet/table:table[@table:name='Sheet1']");
context = JXPathContext.newContext(sheet);
List rowList = context.selectNodes("table:table-row");
for (Object row : rowList) {
context = JXPathContext.newContext(row);
List colList = context.selectNodes("table:table-cell");
for (Object col : colList) {
context = JXPathContext.newContext(col);
Object value = context.getValuet("text:p");
System.out.println(value);
}
}

JXPathってかなり便利だなぁ。以前はjdomに浮気してたけど、依存するライブラリが少ないので、JXPathの方が使いやすい。
スポンサーサイト

COMMENTS

COMMENT FORM

TRACKBACK


この記事にトラックバックする(FC2ブログユーザー)

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。