本特集は、「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ファイルのサンプルは、図1のようになります。
A列:テキストデータ、B列:数値、C列:数値からなる行を入力してみます。ソースコードのフォルダ構成は、次のようになります。
まずは、図2のソースコードをこちらよりダウンロードしておいてください。
本稿のサンプルプログラムについては、以下の注意事項がありますので、気を付けてください。
Javaの文字エンコーディングについて詳しく知りたい読者は、以下の記事を参考にしてください。
ダウンロードして解凍したフォルダの中から、テキストエディタでOpen XMLのExcelファイルを作成する「OXMLCreator.java」ファイルを開いてください。OXMLCreator.javaの処理の流れは、次のようになります。
23 oxml.startFile(); |
Java標準APIによるZIP圧縮について詳しく知りたい読者は、以下の記事を参考にしてください。
15 ArrayList<String> fileList = new ArrayList<String>(); |
16~20行目でZIPファイル(sample.xlsx)に含むファイルのファイル名とパスを追加します。
38 void insertData(String a, int b, int c) { |
insertDataの引数に順に設定したA列のテキスト、B列の数値、C列の数値をそれぞれStringBuffer型のsheetContent変数へ行データ1行分のデータとして保存します。41~45行目でA列、46?48行目でB列、49?51行目でC列を設定します。
60 void createUTF8file(String fileName){ |
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.
Java Agile 鬯ッ�ッ�ス�ョ�ス�ス�ス�ォ�ス�ス�ス�ス�ス�ス�ス�ェ鬯ョ�ッ陋ケ�コ�ス�サ郢ァ謇假スス�ス�ス�ソ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�コ鬯ョ�」陋ケ�ス�ス�ス�ス�オ鬮ォ�エ遶擾スオ�ス�コ�ス�キ�ス�ス�ス�ク�ス�ス�ス�キ�ス�ス�ス�ス�ス�ス�ス�ケ鬮ォ�エ髮懶ス」�ス�ス�ス�「�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ウ鬯ッ�ゥ陝キ�「�ス�ス�ス�「�ス�ス�ス�ス�ス�ス�ス�ァ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ュ鬯ッ�ゥ陝キ�「�ス�ス�ス�「鬮ォ�エ髮懶ス」�ス�ス�ス�「�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ウ鬯ッ�ゥ陝キ�「�ス�ス�ス�「�ス�ス�ス�ス�ス�ス�ス�ァ�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ス�ー