2010年3月28日日曜日

第6回:エクセルのセルの内容を読み取る

今回はエクセルに書かれたセルを読み取るサンプルプログラムを記述してみます。

まず、1列目(縦の最初の列)になんらかの文字を入力している
エクセルファイルを用意して、下記のファイル名で保存してみてください。

C:\temp\sample.xls

前回と同じ方法で、「ReadCellTest」というクラスを作成してみます。

次に下記のプログラムをそのままコピペしてください。

===============================================
import java.io.FileInputStream;
import java.io.FileNotFoundException;
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.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.ss.usermodel.Cell;


public class ReadCellTest {
 public static void main(String[] args) throws FileNotFoundException, IOException{
     //xlsファイルを開くときの書き方
  POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream("C:\\temp\\sample.xls"));
  //エクセル全体を最初に開く
     HSSFWorkbook wb = new HSSFWorkbook(fs);
     //1番目のシートを開く(プログラム上は、0から始まるので、0が1番目を意味して1は2番目を意味する)
     HSSFSheet sheet = wb.getSheetAt(0);
     //整数iというのを定義、これは、エクセルとi行目を取得するために定義
     int i=0;
     // セルの1行を取得する。これもrow.getCell(0);が1行目を意味して、
     //row.getCell(1);とすると2行目を意味する
     HSSFRow row = sheet.getRow(i);
     //行が空になるまで読み続ける。
     while(row != null){
      HSSFCell cell = row.getCell(0);  
      System.out.println((i+1)+"行目の情報");
      //セルのタイプを読み込みます。
      //説明文は、下記のサイトを参照
      //http://poi.apache.org/apidocs/org/apache/poi/hssf/usermodel/HSSFCell.html#getCellType()
      if (cell.getCellType()==Cell.CELL_TYPE_STRING){
       System.out.println("文字型です。");
      }else if (cell.getCellType()==Cell.CELL_TYPE_NUMERIC){
       System.out.println("数字型です。");
      }
      //セルの値を取得して表示。
      System.out.println("セルの値:"+cell.getStringCellValue());
      //次の行に進むために変数iを加算
         i=i+1;
         //次の行を読む
         row = sheet.getRow(i);
     }
     System.out.println("全部で"+i+"行を読み込みました");
 }
}
===============================================

そして、これを実行していきます。
プログラム記述部分で右クリックして
「Run As →Java Application」

とやると実行されます。
(下のほうに実行結果が出てくると思います。)

この実行結果を踏まえて、ソース内の日本語コメントを見ていただければ、
それぞれの部分で何をやっているのかというのが把握できるのではないかと
思います。

一応、ポイントを書いておきます。
・Javaプログラムでは、?番目というのを表す時には、0から始まることが多いので、
コンピュータ上で0番目は、普通の1番目を表す。

・while(row != null)という記述は、()の中身が正しい限りは処理を続けるという
ような場合に記述します。
また!=というのは、「!」が否定を意味するので、「=でない」という意味になります。
つまり、この部分は、

「行のデータ(row)が空でない間処理せよ」

という意味になります。

・ifというのは、場合わけの時に利用します。
なぜ「(cell.getCellType()==Cell.CELL_TYPE_STRING)」という条件が
かけるのかというのは、下記のドキュメントを見れば、cell.getCellType()
というのがどういう値を返すかというのがわかるので、書いています。
http://poi.apache.org/apidocs/org/apache/poi/hssf/usermodel/HSSFCell.html#getCellType()

このサンプルで、
「行を読む」
「セルを読む」
ということができるようになったので、また、下記のドキュメントを見ながら
今回収録した情報の他にどんな情報が読めるんだろうかといろいろ試してみるといいかもしれません。

行の情報
http://poi.apache.org/apidocs/org/apache/poi/hssf/usermodel/HSSFRow.html

セルの情報
http://poi.apache.org/apidocs/org/apache/poi/hssf/usermodel/HSSFCell.html

0 件のコメント:

コメントを投稿