「POI」で Excel ファイルを出力する ( HSSF usermodel / XSSF usermodel / SXSSF )

なんとなく Apache POI で Excel ファイルを出力するサンプル。

Excel ファイルの出力には HSSF usermodel / XSSF usermodel / SXSSF あたりの API が使えるので、それぞれ試す感じで。

・POI-HSSF and POI-XSSF - Java API To Access Microsoft Excel Format Files
https://poi.apache.org/spreadsheet/index.html

package excel;

import java.io.FileOutputStream;
import java.io.IOException;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class ExcelTest {
	public static void main(String[] args) {
		HSSFUserModelTest();
		XSSFUserModelTest();
		SXSSFTest();
	}

	private static void HSSFUserModelTest() {
		try (HSSFWorkbook wb = new HSSFWorkbook();
				FileOutputStream fos = new FileOutputStream("test.xls");) {
			HSSFSheet sheet = wb.createSheet();
			HSSFRow row = null;
			HSSFCell cell = null;
			for (int i = 0; i < 3; i++) {
				row = sheet.createRow(i);
				for (int j = 0; j < 3; j++) {
					cell = row.createCell(j);
					cell.setCellValue("Test" + i + j);
				}
			}
			wb.write(fos);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	private static void XSSFUserModelTest() {
		try (XSSFWorkbook wb = new XSSFWorkbook();
				FileOutputStream fos = new FileOutputStream("test.xlsx");) {
			XSSFSheet sheet = wb.createSheet();
			XSSFRow row = null;
			XSSFCell cell = null;
			for (int i = 0; i < 3; i++) {
				row = sheet.createRow(i);
				for (int j = 0; j < 3; j++) {
					cell = row.createCell(j);
					cell.setCellValue("Test" + i + j);
				}
			}
			wb.write(fos);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	private static void SXSSFTest() {
		try (SXSSFWorkbook wb = new SXSSFWorkbook();
				FileOutputStream fos = new FileOutputStream("test2.xlsx");) {
			Sheet sheet = wb.createSheet();
			Row row = null;
			Cell cell = null;
			for (int i = 0; i < 3; i++) {
				row = sheet.createRow(i);
				for (int j = 0; j < 3; j++) {
					cell = row.createCell(j);
					cell.setCellValue("Test" + i + j);
				}
			}
			wb.write(fos);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	private static void HSSFEventModelTest() {
	}

	private static void XSSFEventModelTest() {
	}
}

ほとんど同じ感じのコードでできますね。内容的には以下のドキュメントで説明されているほぼそのままです。

・The New Halloween Document
https://poi.apache.org/spreadsheet/how-to.html

eventmodel ( 読み込み専用の API ) も試してみようと思ったけど、、、まぁまた今度で。

以上です。

[ 環境情報 ]
Windows 7 SP1
Java SE 8 Update 25
Apache POI 3.11