シートの並び順を変更

広告

ワークブックに複数のシートが含まれている場合に、シートの並び順を変更する方法を確認します。

シートの並び順を変更するにはWorkbookインターフェースで定義されていsetSheetOrderメソッドを使います。

Sets the order of appearance for a given sheet. 

Parameters:
  sheetname - the name of the sheet to reorder
  pos - the position that we want to insert the sheet into (0 based)

1番目の引数に並び順を変更したいシートのシート名を指定します。そして2番目の引数に1番目の引数で指定したシートを挿入したいインデックスを指定します。

シートの位置を変更した場合、新しい並び順に従ってシートに新しいインデックスが割り当てられます。

なおこのメソッドでは引数にシート名を指定する必要があります。シートインデックスを使って指定したい場合には、Workbookインターフェースで定義されているgetSheetNameメソッドを使ってインデックスからシート名を取得して指定するようにしてください。

Set the sheet name

Parameters:
  sheet - sheet number (0 based) 
Returns:
  Sheet name

引数にシートのインデックスを指定すると、対応するシート名を取得できます。

使い方としては下記のようになります。

Workbook wb = new HSSFWorkbook();
Sheet sheet0 = wb.createSheet("Sheet0");
Sheet sheet1 = wb.createSheet("Sheet1");
Sheet sheet2 = wb.createSheet("Sheet2");

wb.setSheetOrder("Sheet2", 1);
wb.setSheetOrder(getSheetName(2), 0);

上記の場合、まず"Sheet2"のシートがインデックス1の位置に挿入されます。結果としてシートの並びは"Sheet0","Sheet2","Sheet1"となります。次にインデックス2のシートがインデックス0の位置に挿入されます。結果として"Sheet1","Sheet0","Sheet2"という並びになります。

サンプルプログラム

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

Sample10_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 Sample10_1{
  public static void main(String[] args){
    Workbook wb = new HSSFWorkbook();

    Sheet sheet0 = wb.createSheet("Sheet0");
    Sheet sheet1 = wb.createSheet("Sheet1");
    Sheet sheet2 = wb.createSheet("Sheet2");

    wb.setSheetOrder("Sheet2", 1);
    wb.setSheetOrder(wb.getSheetName(2), 0);

    FileOutputStream out = null;
    try{
      out = new FileOutputStream("sample10_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ファイルを開いてみます。

シートの並び順を変更

"Sheet2"のシートをまずインデックス1の位置へ挿入し、続いてインデックス2のシートをインデックス0の位置へ挿入しています。

( Written by Tatsuo Ikura )

関連記事 (一部広告含む)