Jakarta POI
1月 1, 2003 · Posted in Apache POI · Comment
Jakarta POIとは
MicrosoftのOLE2複合ドキュメントに対する操作を可能とする。プラットフォームに依存せずに使用することが可能。
入手
Jakarta POIオフィシャルサイトよりバイナリを入手する。
Excelワークブックオブジェクトの作成
POIで新規にExcelファイルを作成する場合、始めにExcelワークブックのオブジェクトを作成する。ExcelワークブックのクラスはHSSFWorkbook。
サンプル
PoiTest.java
import java.io.FileOutputStream;
import java.io.OutputStream;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
public class PoiTest {
public static void main(String[] args) throws Exception{
HSSFWorkbook workbook = new HSSFWorkbook();
}
}
Excelファイルの保存
Excelワークブックのオブジェクトを作成すると、新規のExcelファイルが作成される。この状態でExcelファイルの保存を行うと空のExcelファイルが保存される。
ファイルの書き出しにはHSSFWorkbookのwriteメソッドを使用する。
例
ファイルの書き出しにはHSSFWorkbookのwriteメソッドを使用する。
例
import java.io.FileOutputStream;
import java.io.OutputStream;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
public class PoiTest {
public static void main(String[] args) throws Exception{
HSSFWorkbook workbook = new HSSFWorkbook();
OutputStream out = new FileOutputStream("c:\\sample.xls");
workbook.write(out);
}
}
実行すると、Cドライブに空のExcelファイルが作成される。
ワークシートの作成
HSSFSheetクラスを使用してワークシートに対する操作を行うことが出来る。
ワークブックを作成した時点では、ワークシートがひとつだけ存在する。HSSFWorkbookクラスのcreateSheetメソッドを使用して、ワークシートを作成することができる。
例
import java.io.FileOutputStream;
import java.io.OutputStream;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
public class PoiTest {
public static void main(String[] args) throws Exception{
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet1 = workbook.createSheet();
HSSFSheet sheet2 = workbook.createSheet();
HSSFSheet sheet3 = workbook.createSheet("sheetName");
OutputStream out = new FileOutputStream("c:\\sample.xls");
workbook.write(out);
}
}
明示的にシート名を指定しないでワークシートを作成すると、sheet0から始まる連番がシート名に指定されている。
テンプレートの読み込み
POIではワークブックを新規作成する以外に、既存のテンプレートファイルを読み込むことができる。処理の流れは以下のようになる。
- InputStreamオブジェクトを作成
- POIFSFileSystemを作成
- HSSFWorkbookを作成
import java.io.FileInputStream;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
public class PoiTest {
public static void main(String[] args) throws Exception{
FileInputStream in = null;
try{
in = new FileInputStream("c:\\file.xls");
POIFSFileSystem pfs = new POIFSFileSystem(in);
HSSFWorkbook workbook = new HSSFWorkbook(pfs);
}finally{
in.close();
}
}
}
行、セルの取得〜文字の書き出し
ワークブック>ワークシート>行>セルという順にオブジェクトを取得して、セルに対して値や書式の指定を行う。
PoiTest.java
import java.io.FileOutputStream;
import java.io.OutputStream;
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;
public class PoiTest {
public static void main(String[] args) throws Exception{
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet();
HSSFRow row = sheet.createRow(0);
HSSFCell cell = row.createCell((short)0);
cell.setCellValue("hello poi");
OutputStream out = new FileOutputStream("c:\\sample.xls");
workbook.write(out);
}
}
行の中のセルを取得する場合、HSSFRow.createCellメソッドを利用する。すでにセルが存在する場合はHSSFRow.getCellメソッドでセルを取得することも出来る。ただし、getCellメソッドで取得しようとしたセルが空の場合、例外が発生するため注意が必要。
罫線の描画
import java.io.FileOutputStream;
import java.io.OutputStream;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
public class PoiTest {
public static void main(String[] args) throws Exception{
HSSFWorkbook workbook = new HSSFWorkbook();
HSSFSheet sheet = workbook.createSheet();
HSSFRow row = sheet.createRow(0);
HSSFCell cell = row.createCell((short)0);
cell.setCellValue("hello poi");
HSSFCellStyle style = workbook.createCellStyle();
style.setBorderTop(HSSFCellStyle.BORDER_THIN);
style.setBorderRight(HSSFCellStyle.BORDER_THIN);
style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
cell.setCellStyle(style);
OutputStream out = new FileOutputStream("c:\\sample.xls");
workbook.write(out);
}
}
利用できる罫線は、org.apache.poi.hssf.usermodel.HSSFCellStyleクラスに定数として定義されている。
- BORDER_DASH_DOT
- BORDER_DASH_DOT_DOT
- BORDER_DASHED
- BORDER_DOTTED
- BORDER_DOUBLE
- BORDER_HAIR
- BORDER_MEDIUM
- BORDER_MEDIUM_DASH_DOT
- BORDER_MEDIUM_DASH_DOT_DOT
- BORDER_MEDIUM_DASHED
- BORDER_NONE
- BORDER_SLANTED_DASH_DOT
- BORDER_THICK
- BORDER_THIN

