JavaでExcelファイルの結合と、別のワークブックへシートをコピーする話

  • SmartBee
  • Java

最終更新⽇:

掲載⽇:

本記事は、Javaを用いてExcelファイルを合成する方法について説明します。

事前準備
1. jarファイルのインポート
必要な.jarファイルは以下になります。

Aspose.Cells for Java
バージョン一覧からバージョンを選択し、「aspose-cells-xx.x.jar」ファイルをダウンロードしてください。

必要なjarファイルを用意したら、パスを通してください。Eclipseを利用したパスの通し方はこちらのサイトに記載しています。


SmartBeeコラム.png

プログラムの例
1. Excelファイルの合成

 import com.aspose.cells.FileFormatType;
 import com.aspose.cells.Workbook;

 public class Sample1 {
    public static void main(String[] args) throws Exception{
        //ファイルの読み込み
        Workbook sourceWorkbook = new Workbook("c:\\Users/sourceExcell.xlsx");
        Workbook targetWorkbook = new Workbook("c:\\Users/targetExcell.xlsx");

        //ファイルの合成
        targetWorkbook.combine(sourceWorkbook);

        //ファイルの保存
        targetWorkbook.save("c:\\Users/targetExcell.xlsx", FileFormatType.XLSX);

        System.out.println("完了");
    }
 }


本プログラムでは、「sourceWorkbook」と「targetWorkbook」を合成し、その結果を「targetWorkbook」に保存しています。

targetWorkbook.combine(sourceWorkbook);combineメソッドを利用して2つのワークブック「sourceWorkbook」と「targetWorkbook」を合成します。

targetWorkbook.save("c:\\Users/targetExcell.xlsx", FileFormatType.XLSX);本記事はxlsxファイルの合成をしていますが、他にもxls等のExcellファイルの合成も可能です。
合成するファイルの種類を変更する際は「FileFormatType」を合成するファイルの拡張子やバージョンに合わせて変更してください。

シートの合成について補足すると、ファイルを保存したタイミングで「Aspose.Cells for JavaAPI」ライセンスの設定をしていないと「Evaluation Warning」シートが追加されることに注意してください。

2. 別のワークブックへシートをコピー

 import com.aspose.cells.FileFormatType;
 import com.aspose.cells.Workbook;

 public class Sample2 {


    public static void main(String[] args) throws Exception {

       Workbook sourceWorkbook = new Workbook("c:\\Users/sourceExcell.xlsx");

       Workbook targetWorkbook = new Workbook("c:\\Users/targetExcell.xlsx");


        //シートの数をカウント

       int sourceSheetCount = sourceWorkbook.getWorksheets().getCount();

       int targetSheetCount = sourceWorkbook.getWorksheets().getCount();



       for(int i = 0; i < sourceSheetCount; i++) {

            //コピー先のシートを作成

            targetWorkbook.getWorksheets().add("新しいシート" + (targetSheetCount + i));

            //別のワークブックにシートをコピー

            targetWorkbook.getWorksheets().get(targetSheetCount + i).copy(sourceWorkbook.getWorksheets().get(i));

       }

         //ファイルの保存

       targetWorkbook.save("c:\\Users/targetExcell.xlsx", FileFormatType.XLSX);


       System.out.println("完了");

    }

 }


本プログラムは、「targetWorkbook」に新しいシートを作成して、そこに「sourceWorkbook」のシートをコピー&ペーストしています。

targetWorkbook.getWorksheets().add("新しいシート" + (targetSheetCount + i));

ここでは、「新しいシート+(現在のシートの数+1)」を新しいシートとして追加しています。

targetWorkbook.getWorksheets().get(targetSheetCount + i).copy(sourceWorkbook.getWorksheets().get(i));

copyメソッドを使用して、シートをコピーします。
targetSheetCount + i」がコピー先のシートの番号、「sourceWorkbook.getWorksheets().get(i)」コピー元のシート番号になります。

本プログラムもワークブックを合成した場合と同じく、ファイルを保存したタイミングで「Aspose.Cells for JavaAPI」ライセンスの設定をしていないと「Evaluation Warning」シートが追加されることに注意してください。

感想

エクセル操作で一番有名なライブラリ「POI」で別のワークブックに合成やコピーしたシートをペーストできないか調査しましたが、そういった機能はないらしいです。

力業でセルの内容をコピーして別のワークブックに貼り付けるやり方もありますが、プログラム作成に膨大な時間が必要になりそうだったので、今回はAspose.Cells for Javaを使用しました。

使用した感触は悪くありませんでしたが、一つ問題なことは、ファイル保存時に「Evaluation Warning」シートが追加される点です。
ライセンスを取得すればという声が聞こえますが、ライセンスは有料になります。

このあたりの問題が解決すれば、Aspose.Cells for JavaはPOI以上に使用できるライブラリなのではないかと思いました。