S-JIS[2014-10-05/2014-10-13] 変更履歴

Apache POI Sheet

POI3.10でワークシートを扱う方法について。


概要

ExcelのワークシートはSheetインターフェースで扱う。

import org.apache.poi.ss.usermodel.Sheet;

セルは行(Rowインターフェース)毎に保持されている。


シートの取得

Workbookからシートを取得する方法。

操作 備考
シート数の取得 int n = workbook.getNumberOfSheets();  
アクティブシートの取得 int index = workbook.getActiveSheetIndex(); シート番号を返す。
シートの取得 Sheet sheet = workbook.getSheetAt(index); シート番号を指定してシートを取得する。
範囲外の場合はIllegalArgumentExceptionが発生する。
Sheet sheet = workbook.getSheet(sheetName); シート名を指定してシートを取得する。
シート名は大文字小文字を無視して検索される。
見つからなかった場合はnullが返る。
シート番号の取得 int index = workbook.getSheetIndex(sheetName); シート名を指定してシート番号を取得する。
シート名は大文字小文字を無視して検索される。
見つからなかった場合は-1が返る。
int index = workbook.getSheetIndex(sheet); シートを指定してシート番号を取得する。
(インスタンスが一致するものを探索する)
見つからなかった場合は-1が返る。
		int n = workbook.getNumberOfSheets();
		for (int i = 0; i < n; i++) {
			Sheet sheet = workbook.getSheetAt(i);
			System.out.println(sheet.getSheetName());
		}

シートの作成

Workbookに新しいシートを追加する方法。

import org.apache.poi.ss.usermodel.Sheet;
		Sheet sheet = workbook.createSheet();
		workbook.setSheetName(workbook.getSheetIndex(sheet), "sheetName");
		Sheet sheet = workbook.createSheet("sheetName");

シートはワークブックの末尾に追加される。
引数なしのcreateSheet()ではシート名がデフォルトのものになるので、別途指定する必要がある。
なお、シート名が不正な場合はIllegalArgumentExceptionが発生する。

他に、SheetBuilderというクラスを使う方法もある。こちらはセルの初期値も指定できる。


シート名のチェック

Excelのワークシート名には、使える文字や文字数等に制限がある。
(例えば「?」や「*」は使えないとか、31文字までとか)

そういったチェックをPOIで行うことが出来る。

import org.apache.poi.ss.util.WorkbookUtil;
メソッド 説明
String createSafeSheetName(String nameProposal) 安全なシート名に変換する。
(使用できない文字はスペースに置き換える。31文字より長い場合は後ろを切り捨てる)
String createSafeSheetName(String nameProposal, char replaceChar) 安全なシート名に変換する。
(使用できない文字はreplaceCharに置き換える。31文字より長い場合は後ろを切り捨てる)
void validateSheetName(String sheetName) シート名をチェックする。
使用できないシート名の場合はIllegalArgumentExceptionが発生する。
void validateSheetState(int state) シートのステータスをチェックする。
不正なステータスの場合はIllegalArgumentExceptionが発生する。

行の追加

シートに新しい行(空行)を追加するにはshiftRowsメソッドを使う。[2014-10-13]

		Sheet sheet = 〜;
		int startRow = 1;
		int endRow   = startRow;
		int rows     = 1;
		boolean copyRowHeight = true;
		boolean resetOriginalRowHeight = false;
		sheet.shiftRows(startRow , endRow, rows, copyRowHeight, resetOriginalRowHeight);

shiftRowsメソッドは、startRow〜endRowの範囲を、rows行移動(シフト)させる。

shiftRowsメソッドによって行を移動させると、以下の位置も連動して変更される。(poi-3.10-FINAL)

poi-3.10-FINALでは、セルに設定されている入力規則は移動しないので注意。


列の追加

poi-3.10-FINALでは、列を追加するメソッドは提供されていないようだ。[2014-10-13]


POI目次へ戻る / Excel操作ライブラリーへ戻る / Java目次へ戻る / 技術メモへ戻る
メールの送信先:ひしだま