データ入力を行うには、Webブラウザや専用のGUI画面を使用することが一般的ですが、用途によっては、Microsoft Excelで作成したファイルからデータの読み込みを求められることがあります。そこで、本稿では「POI」を使用して、Excelファイルを読み込む方法を紹介します。なお、POIの基本については、「POIを使用してJavaからExcel出力を行う」をご覧ください。
今回は、Excelファイルを読み込み合計値を出力するというサンプルを実行します。
以下は、先ほど示したExcelファイルをJavaで読み込むためのプログラムです。
package to.msn.wings; import java.io.FileInputStream; import java.text.SimpleDateFormat; import java.util.Date; import org.apache.poi.hssf.usermodel.*; import org.apache.poi.poifs.filesystem.POIFSFileSystem; public class PoiReadSample { public static void main(String[] args) { try { //Excelのワークブックを読み込みます。 POIFSFileSystem filein = new POIFSFileSystem (new FileInputStream("C:\\PoiReadSample.xls")); HSSFWorkbook wb = new HSSFWorkbook(filein); //シートを読み込みます。 HSSFSheet sheet = wb.getSheet("サンプルSheet"); //3行目の値を読み込みます。 HSSFRow row = sheet.getRow(2); //getStringCellValueにて文字列を読み込みます。 HSSFCell cell = row.getCell((short) 1); String shopName = cell.getStringCellValue(); //getDateCellValueにて日付を読み込みます。 cell = row.getCell((short) 2); Date inputDate = cell.getDateCellValue(); //6行目から17行目の値を読み込みます。 int sum = 0; //合計金額を保存する変数 for (int i = 5; i <= 16; i++) { //getNumericCellValueにて数字を読み込みます。 row = sheet.getRow(i); cell = row.getCell((short) 2); sum = sum + (int) cell.getNumericCellValue(); } //Excelから読み込んだ結果を出力します。 System.out.println(shopName + "の年間売上は" + sum + "円です。"); System.out.println(new SimpleDateFormat ("yyyy/MM/dd").format(inputDate) + "入力" ); } catch (Exception e) { e.printStackTrace(); System.out.println("処理が失敗しました"); } } }
このプログラムを実行すると下記のように出力されます。
東京駅前店の年間売上は78000円です。 2004/04/20入力
今回のサンプルでは、店名は文字列型のためgetStringCellValueメソッド、入力日は日付型のためgetDateCellValueメソッド、売上げはgetNumericCellValueメソッドにてセルの値を読み込んでいます。このように、セルに設定されている値を取得したい場合には、HSSFCellクラスのget〜Valueメソッドを使用します。
HSSFCellのメソッド | 詳細 | |
---|---|---|
getBooleanCellValue | セルの値をBoolean型にて読み込む | |
getDateCellValue | セルの値を日付型にて読み込む | |
getNumericCellValue | セルの値をDouble型の数値にて読み込む | |
getStringCellValue | セルの値を文字列型にて読み込む | |
getCellFormula | セルに設定されている計算式を読み込む |
今回紹介したセルの読み込み方法を整理すると以下の手順になります。
- ワークブックの指定(HSSFWorkbookクラス)
- ワークシートの指定(HSSFWorkbook#getSheetメソッド)
- 対象列の指定(HSSFSheet#getRowメソッド)
- 対象セルの指定(HSSFRow#getCellメソッド)
- セル値の読み込み(HSSFCell#get〜CellValueメソッド)
なお、文字列のセルをgetNumericCellValueで読み込んだり、数字型のセルをgetStringCellValueにて読み込んだりするとNumberFormatExceptionが発生します。そのためgetCellTypeメソッドを使用して事前にセルの型を調べることができます。getCellTypeメソッドの戻り値は下記のとおりです。
フィールド名 | セルの型 | |
---|---|---|
CELL_TYPE_BLANK | 空白 | |
CELL_TYPE_BOOLEAN | Boolean型 | |
CELL_TYPE_ERROR | エラーコード | |
CELL_TYPE_FORMULA | 計算式 | |
CELL_TYPE_NUMERIC | 数値型 | |
CELL_TYPE_STRING | 文字列型 |
getCellTypeメソッドの戻り値に応じて、処理内容を制御するとよいでしょう。
Copyright © ITmedia, Inc. All Rights Reserved.