セルの結合

広告

セルを結合する方法を確認します。セルを結合するにはSheetインターフェースで用意されているaddMergedRegionメソッドを使います。

int addMergedRegion(CellRangeAddress region)

Adds a merged region of cells (hence those cells form one)

Parameters:
  region - (rowfrom/colfrom-rowto/colto) to merge 
Returns:
  index of this region

引数には結合するセルの範囲を表すCellRangeAddressクラスのオブジェクトを指定します。それではCellRangeAddressクラスについて確認しましょう。

--*--*--

CellRangeAddressクラスのクラス定義は次のようになっています。

public class CellRangeAddress
extends CellRangeAddressBase

java.lang.Object
 L org.apache.poi.ss.util.CellRangeAddressBase
    L org.apache.poi.ss.util.CellRangeAddress

コンストラクタは2つ定義されていますが、次のコンストラクタを使用します。

public CellRangeAddress(int firstRow, int lastRow, int firstCol, int lastCol)

--

4つの引数で結合したいセルの範囲を指定します。1つ目には先頭の行番号、2つ目には最後の行番号、3つ目には先頭の列番号、4つ目には最後の列番号を指定して下さい。

-- --

CellRangeAddressクラスのオブジェクトを作成したらセルを結合します。実際の使い方は次のようになります。

InputStream in = new FileInputStream("filename.xls");
Workbook wb = WorkbookFactory.create(in);
Sheet sheet = wb.getSheetAt(0);

sheet.addMergedRegion(new CellRangeAddress(1, 4, 1, 6));

この場合、行番号が1から4、列番号が1から6までの長方形の領域を結合します。

なお結合する範囲内の複数のセルに値が設定されていた場合には、最も左上端にあるセルの値が結合されたセルに設定されます。

サンプルプログラム

実際に試してみましょう。

Sample11_1.java

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import java.io.*;

public class Sample11_1{
  public static void main(String[] args){
    FileInputStream in = null;
    Workbook wb = null;

    try{
      in = new FileInputStream("sample.xls");
      wb = WorkbookFactory.create(in);
    }catch(IOException e){
      System.out.println(e.toString());
    }catch(InvalidFormatException e){
      System.out.println(e.toString());
    }finally{
      try{
        in.close();
      }catch (IOException e){
        System.out.println(e.toString());
      }
    }

    Sheet sheet0 = wb.getSheetAt(0);
    sheet0.addMergedRegion(new CellRangeAddress(1, 4, 2, 3));

    FileOutputStream out = null;
    try{
      out = new FileOutputStream("sample11_1.xls");
      wb.write(out);
    }catch(IOException e){
      System.out.println(e.toString());
    }finally{
      try {
        out.close();
      }catch(IOException e){
        System.out.println(e.toString());
      }
    }
  }
}

事前に下記のようなExcelファイルを用意してあります。

セルの結合

プログラムを実行すると、1行目から4行目までと、2列目から3列目までの範囲を結合します。では作成されたExcelファイルを開いてみます。

セルの結合

指定した範囲のセルが結合されます。結合前の範囲の一番左上端にあったのがC2セルのため、結合されたセルにはC2に設定されていた値が設定されます。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。