2010年4月3日土曜日

第8回:セルの結合情報を読み取ってみる。

今回は、エクセルのセルの結合情報を読み取ってみることを
行いたいと思います。

前回と同様に、ReadCelRangeAddressTestというクラスを作ってみて、
下記のソースコードをコピーして実行してみてください。

============================================
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

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.util.CellRangeAddress;


public class ReadCelRangeAddressTest extends 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);
     System.out.println("結合されたセルの数:"+sheet.getNumMergedRegions());
     for (int i=0;i<sheet.getNumMergedRegions();i++){
      //i番目の結合情報を取得する。
      CellRangeAddress range = sheet.getMergedRegion(i); 
      System.out.println(i+"番目:"+range.formatAsString());
     }
 }
}

============================================



実行すると実行結果が下記のよな感じになっていると思います。
============================================
結合されたセルの数:15
0番目:B6:C6
1番目:B1:C1
2番目:B2:C2
...以下略
============================================

B6:C6というのは、接合されたセルの左上の位置と、右下の位置を
文字列で表現したものです。「B6:C6」の場合には、
左上が、「B列の6行目」
右下が、「C列の6行目」
というのを意味します。


また、

sheet.getNumMergedRegions()

はシート内に、何個の結合セルがあるかというのを返します。
http://poi.apache.org/apidocs/org/apache/poi/ss/usermodel/Sheet.html#getNumMergedRegions()

sheet.getMergedRegion(i)

では、シート内のi番目の結合セル情報を取り出します。
http://poi.apache.org/apidocs/org/apache/poi/ss/usermodel/Sheet.html#getMergedRegion(int)

range.formatAsString()
は、その結合セル情報の文字列表現を取得します。
それが、「B6:C6」みたいな表現になります。

http://poi.apache.org/apidocs/org/apache/poi/ss/util/CellRangeAddress.html#formatAsString()

というわけで、今までやってきたことを組み合わせていくと、
・複数のシートにある情報をひとつのシートにまとめる
というようなプログラムも作成でいると思います。

0 件のコメント:

コメントを投稿