XMLを取り込んだExcelならJava標準APIで操作できる!
本特集は、「Office 2007」よりファイル形式として使われている「Office Open XML」ファイルフォーマット(以下、Open XML)について解説をする特集記事です。前編の「Officeファイルの成り立ちと最新形、そして標準化」では、XMLを取り込んだOpen XMLの成り立ちやOpenOfficeとの比較、標準化の流れ、仕様の概要について紹介しました。
後編は、Excelを例にJavaで最新Officeフォーマットファイルのデータを操作する方法を紹介します。まず、ワークシートが1つで、テキストと数値の行を入力したシンプルなExcelファイルを作成してみます。次に、DOM操作用のJava標準APIである「org.w3c.dom」「javax.xml.parsers」「javax.xml.transform」パッケージなどを使って、作成したExcelファイルの各行を参照したり、データをさらに追加したり、データの一部更新、削除など行ってみます。
Java標準APIによるXML操作の基本を知りたい読者は、少し情報が古いですが、以下の連載を参考にしてください。
■ サンプルExcelファイルを見てみよう
今回最初に作成するExcelファイルのサンプルは、図1のようになります。
A列:テキストデータ、B列:数値、C列:数値からなる行を入力してみます。ソースコードのフォルダ構成は、次のようになります。
まずは、図2のソースコードをこちらよりダウンロードしておいてください。
■ サンプルプログラムの注意事項
本稿のサンプルプログラムについては、以下の注意事項がありますので、気を付けてください。
- Java動作確認環境は、JDK 6 Update 5ですJDK 6 Update 5です
- Office 2007でdocx/xlsx/pptxサンプルファイルの編集や保存を行うと、元のサンプルにないコードが挿入されます
- テキストエディタでサンプルのXMLファイルを編集する場合、文字コードをUTF-8に設定してください。エンコーディングが正しく設定されないと、Office 2007でdocx/xlsx/pptxファイルが開けない場合があります文字コードをUTF-8に設定してください。エンコーディングが正しく設定されないと、Office 2007でdocx/xlsx/pptxファイルが開けない場合があります
- プログラムをコンパイルする際、コンパイル環境がUTF-8ではない場合、『javac -encoding UTF-8 OXMLCreator.java』のように、コンパイル時に文字コード(エンコーディング)を指定してくださいコンパイルする際、コンパイル環境がUTF-8ではない場合、『javac -encoding UTF-8 OXMLCreator.java』のように、コンパイル時に文字コード(エンコーディング)を指定してください
- サンプルファイルは読み取り専用になっています。必要に応じ、解除してください読み取り専用になっています。必要に応じ、解除してください
- サンプルプログラムは自己責任によりご利用ください
Javaの文字エンコーディングについて詳しく知りたい読者は、以下の記事を参考にしてください。
Open XMLのExcelファイルを作成するには?
ダウンロードして解凍したフォルダの中から、テキストエディタでOpen XMLのExcelファイルを作成する「OXMLCreator.java」ファイルを開いてください。OXMLCreator.javaの処理の流れは、次のようになります。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
- sheet1.xmlファイルに書き込む内容をStringBufferへ保存(23?27行目)
- 1.で保存したデータからsheet1.xmlファイルを生成(28行目)
- あらかじめ保存しておいた[Content_Types].xmlやworkbook.xmlなどのファイルとともにsheet1.xmlファイルをZIP圧縮し、sample.xlsx生成(29行目)
Java標準APIによるZIP圧縮について詳しく知りたい読者は、以下の記事を参考にしてください。
■ sample.xlsxに含むファイルの構成を決める
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
16〜20行目でZIPファイル(sample.xlsx)に含むファイルのファイル名とパスを追加します。
■ 行データの追加
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
insertDataの引数に順に設定したA列のテキスト、B列の数値、C列の数値をそれぞれStringBuffer型のsheetContent変数へ行データ1行分のデータとして保存します。41〜45行目でA列、46?48行目でB列、49?51行目でC列を設定します。
■ sheet1.xmlの生成
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
StringBuffer型のsheetContent変数へ保存したデータからsheet1.xmlファイルを生成します。63行目でsheet1.xmlの文字コードを「UTF-8」に設定します。なお、Open XMLでサポートされている文字コードは、「Unicode」(「UTF-8」または「UTF-16」)および「ISO/IEC 10646」です。
sheet1.xmlファイルを生成後、あらかじめ保存しておいた[Content_Types].xmlやworkbook.xmlなどのファイルとともにsheet1.xmlファイルをZIP圧縮すると、図1のようなExcelファイルが作成されます。
次ページでは、今回作成したサンプルExcelファイル「sample.xlsx」の行データについて、参照、追加、一部更新、削除を行ってみます。
Copyright © ITmedia, Inc. All Rights Reserved.