作成済みのワークブックを開く
今度は新規にワークブックを作成するのではなく、既に作成されているワークブックを開いてワークブックオブジェクトを作成する方法を確認します。
既存のワークブックからワークブックオブジェクトを作成するためにWorkbookFactoryクラスが用意されています。このクラスを使用すればどちらのファイルフォーマットで保存されたワークブックであっても同じように扱うことが可能です。
WorkbookFactoryクラスのクラス定義は次のようになっています。
public class WorkbookFactory extends java.lang.Object
java.lang.Object L org.apache.poi.ss.usermodel.WorkbookFactory
そしてWorkbookFactoryクラスで用意されているstaticメソッドのcreateメソッドを使ってワークブックを開きます。
public static Workbook create(java.io.InputStream inp) throws java.io.IOException, InvalidFormatException
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);
※実際には例外処理を行う必要があります。具体的には末尾のサンプルを参照して下さい。
読み込んだワークブックに対して、新しいシートを追加するなどの変更を行った上で改めて保存することができます。
サンプルプログラム
実際に試してみましょう。
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 )
著者 / TATSUO IKURA
これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。