作成済みのワークブックを開く

広告

今度は新規にワークブックを作成するのではなく、既に作成されているワークブックを開いてワークブックオブジェクトを作成する方法を確認します。

既存のワークブックからワークブックオブジェクトを作成するためにWorkbookFactoryクラスが用意されています。このクラスを使用すればどちらのファイルフォーマットで保存されたワークブックであっても同じように扱うことが可能です。

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

public class WorkbookFactory
extends java.lang.Object
java.lang.Object
 L org.apache.poi.ss.usermodel.WorkbookFactory

そしてWorkbookFactoryクラスで用意されているstaticメソッドのcreateメソッドを使ってワークブックを開きます。

Creates the appropriate HSSFWorkbook / XSSFWorkbook from the given InputStream. Your 
input stream MUST either support mark/reset, or be wrapped as a PushbackInputStream!

Throws:
  java.io.IOException 
  InvalidFormatException

引数に指定したInputStreamからワークブックを読み込みます。

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

InputStream in1 = new FileInputStream("filename.xls");
Workbook wb1 = WorkbookFactory.create(in1);

InputStream in2 = new FileInputStream("filename.xlsx");
Workbook wb2 = WorkbookFactory.create(in2);

※実際には例外処理を行う必要があります。具体的には末尾のサンプルを参照して下さい。

読み込んだワークブックに対して、新しいシートを追加するなどの変更を行った上で改めて保存することができます。

サンプルプログラム

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

Sample4_1.java

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

public class Sample4_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 sheet = wb.createSheet("new sheet");

    FileOutputStream out = null;
    try{
      out = new FileOutputStream("sample4_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ファイルを一つ作成しておきました。

作成済みのワークブックを開く

コンパイルを行い実行すると元になるファイルからワークブックを読み込み、シートを追加した上で「sample4_1.xls」というファイルに保存しています。それでは作成されたファイルをExcelで開いてみます。

作成済みのワークブックを開く

元々存在していたワークブックを読み込めていることが確認できました。

( Written by Tatsuo Ikura )

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