行の移動

広告

シートに含まれる行を別の位置へ移動させる方法を確認します。

行を移動するにはSheetインターフェースで用意されているshiftRowsメソッドを使います。

void shiftRows(int startRow, int endRow, int n)

Shifts rows between startRow and endRow n number of rows. If you use a negative number, 
it will shift rows up. Code ensures that rows don't wrap around. 
Calls shiftRows(startRow, endRow, n, false, false);

Additionally shifts merged regions that are completely defined in these rows (ie. 
merged 2 cells on a row to be shifted).

Parameters:
  startRow - the row to start shifting
  endRow - the row to end shifting
  n - the number of rows to shift

移動する行の範囲を1番目の引数と2番目の引数で指定します。それぞれ行番号を指定して下さい。そして3番目の引数に指定した値だけ移動します。プラスの値を指定すると行番号が増加する方向へ移動し、マイナスの値を指定すると行番号が減少する方向へ移動します。

例えば行番号1から3までの行を2だけ移動させた場合には、行番号1から3までにあった行が、行番号3から5の位置に移動します。移動する先にあった行は上書きされます。

実際には次のように記述します。

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

sheet.shiftRows(1, 3, 2);

この場合、行番号が1から3の行を、2つだけ下方向へ移動します。

サンプルプログラム

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

Sample12_1.java

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

public class Sample12_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.shiftRows(2, 3, 2);

    FileOutputStream out = null;
    try{
      out = new FileOutputStream("sample12_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ファイルを用意してあります。

行の移動

プログラムを実行すると、2行目から3行目までの行を2つ移動します。では作成されたExcelファイルを開いてみます。

行の移動

2行目から3行目までの行が4行目から5行目へ移動していることが確認できます。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

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