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]