JavaのコードでExcelのファイルを作成--気軽に便利なApache POIライブラリ

2015年12月22日


Apache POIライブラリを使うと、Java言語から、Excelのファイルを簡単に生成できます。きれいな表やグラフを作りたいときや、サーバで難しい処理をした結果をExcel形式で出力したいときなどに、重宝するかもしれません。

CSVだと書式が崩れて困る

Java言語でデータを処理して、結果をExcelでグラフにしたいとき、たいていはデータをCSV形式で書き出します。

"距離(km)","燃料消費量(l)","メモ" "1","0.20","東京駅前" "2","0.25","有楽町カメラ量販店前" "3","0.30","新橋駅前広場" "4","0.40","浜松町" "5","0.45","田町"!?&,<>""

ところが、CSV形式には、以下のような問題があり、データの表示形式が思った通りにならなかったり、流し込むセルががずれたりすることもあります。

CSVを読み込んだExcelの画面

Javaのプログラムから直接、Excel本来の形式で、セル毎の書式や、特殊な文字が入ったテキストなどもふまえてデータを出力できれば、それなりに便利にできそうです。

Excelのファイル形式はけっこう複雑

Excel2007以降で使われている拡張子が".xlsx"のファイルは、「Office Open XML方式」と呼ばれ、実はたくさんのXMLファイルをZIP形式に圧縮したものになっています。

XMLはテキスト形式なので、基本的にはXMLの書式に従ってデータを書き出せば、自作のJavaプログラムからExcelのファイルを出力できます。

しかし、これをやろうとすると結構難しいです。

一例として、ごくわずかにデータを入れただけでも、XMLファイルはこのように、たいへん長くなります。

<?xml version="1.0" encoding="UTF-8"
standalone="yes"?>
<worksheet xmlns=
"http://schemas.openxmlformats.org/spreadsheetml/2006/main"
xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="x14ac"
xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac"><dimension
ref="A1:B3"/><sheetViews><sheetView tabSelected="1"
workbookViewId="0"><selection activeCell="B3"
sqref="B3"/></sheetView></sheetViews>
<sheetFormatPr defaultRowHeight="13.5" x14ac:dyDescent="0.15"/>
<sheetData><row r="1" spans="1:2" x14ac:dyDescent="0.15">
<c r="A1"><v>1.23</v></c><c r="B1" s="1" t="s">
<v>0</v></c></row>
<row r="2" spans="1:2" x14ac:dyDescent="0.15">
<c r="A2"><v>2</v></c>
<c r="B2" t="s"><v>1</v></c>
</row><row r="3" spans="1:2" x14ac:dyDescent="0.15">
<c r="A3"><v>3</v></c>
<c r="B3" t="s"><v>2</v></c>
</row></sheetData>
<phoneticPr fontId="1"/>
<pageMargins left="0.7" right="0.7" top="0.75"
bottom="0.75" header="0.3" footer="0.3"/>
</worksheet>

ご参考までに、1枚のシートを示す上記のXMLファイルに含まれる、いくつかのタグの意味を以下に示します。

ささやかなExcelファイルでも、このようなXMLファイルが10個以上作られるようで、それぞれのXMLファイルを組み合わせて、1つのExcelファイルを組み立てていく必要があります。

XMLファイルの仕様書は、何千ページもあるので、とても読んでいられません。まあ、大量の仕様書が公開されていることは、それはそれですごいことなのですが・・・。

Excelファイルを簡単に出力できるライブラリを使おう

Javaのソースコードから、簡単にExcelのファイルを出力できるライブラリApache POIを見つけました。

これを使えば、Javaから比較的簡単にExcelのファイルを出力できます。

ブックの中に、シートを作り、行にセルを配置して、セルにデータを入れて、書式を設定して・・・といったことを、Javaの実行文で1つ1つ書いていき、最後にFileOutputStreamに書き出す指示をすれば、実行した通りの内容のExcelファイルができてしまいます。

「シート1」のワークシートの、左上のセルに123(数値)の入ったワークブックを作り、ファイルに書き出すなら、これだけでOKです。

Workbook book = new XSSFWorkbook(); // ワークブックを作る Sheet sheet1 = book.createSheet("シート1"); // シートを作る Row row = sheet1.createRow((short)0);// 最初の行を作る Cell cell = row.createCell(0);// 最初の行にセルを作る cell.setCellValue(123); // セルに値を入れる FileOutputStream fos = new FileOutputStream("book0001.xlsx"); // 出力するファイルの設定 book.write(fos); // ファイルへの出力 fos.close();// 出力完了

なお、WorkbookやSheetといったクラス名は、別途インポートが必要です。また、ファイルに書き出すためには例外をキャッチする処理なども必要ですのでご注意ください。

使い方を覚えるのが面倒な人のために、忙しい人向けのガイド(quick-guide)も公開されています。

これを読めば、たぶん見よう見まねでそれっぽい表が作れます。

ちなみに


トップページなにげなく自由研究(もくじ) → JavaのコードでExcelのファイルを作成--気軽に便利なApache POIライブラリ
著者のメールアドレス・Twitterアカウントは、トップページからご覧ください。

製作・著作:杉原 俊雄(すぎはら としお)
(c)2015 Sugihara Toshio. All rights reserved.