Javaを使用して複数のExcelファイルを1つにまとめる

複数のExcelブックがあり、それらを1つのファイルにまとめてレポートしたり、データを1か所に保存したりする必要があります。 Java開発者は、プログラムで複数のExcelファイルを1つのファイルに簡単にマージできます。この記事では、Javaを使用して複数のExcelファイルを1つに結合する方法を学習します。

この記事では、次のトピックについて説明/取り上げています。

ExcelファイルをマージするJavaAPI

複数のExcelファイルをマージするには、Aspose.Cells for JavaAPIを使用します。このAPIを使用すると、Microsoft Excelに依存せずに、スプレッドシートを作成、操作、変換、保護、または印刷できます。これにより、JavaアプリケーションでプログラムによってExcel自動化機能を実行できます。

APIのJARをダウンロードするか、MavenベースのJavaアプリケーションに次のpom.xml構成を追加して、以下のコード例を試すことができます。

<repository>
    <id>AsposeJavaAPI</id>
    <name>Aspose Java API</name>
    <url>https://repository.aspose.com/repo/</url>
</repository>
<dependency>
    <groupId>com.aspose</groupId>
    <artifactId>aspose-cells</artifactId>
    <version>21.8</version>
</dependency>

Javaを使用して複数のExcelファイルを1つに結合する

以下の手順に従って、プログラムで複数のExcelファイルを1つのファイルに簡単に組み合わせることができます。

  • 最初のソースファイルを使用してWorkbookクラスのインスタンスを作成します
  • 2番目のソースファイルを使用してWorkbookクラスのインスタンスを作成します
  • 3つ以上のファイルを組み合わせるには、上記の手順を繰り返します
  • 2番目のソースファイルインスタンスでcombine()メソッドを呼び出します
  • すべてのソースファイルに対して上記の手順を1つずつ繰り返します
  • Workbookクラスのsave()メソッドを呼び出して、出力ファイルを保存します

次のコードサンプルは、Javaを使用して複数のExcelファイルを1つのファイルに結合する方法を示しています。

// 最初のExcelファイルを開きます。
Workbook SourceBook1 = new Workbook("C:\\Files\\Quarter_1.xlsx");

// 2番目のExcelファイルを開きます。
Workbook SourceBook2 = new Workbook("C:\\Files\\Quarter_2.xlsx");

// 3番目のExcelファイルを開きます。
Workbook SourceBook3 = new Workbook("C:\\Files\\Quarter_3.xlsx");

// 2番目のExcelファイルのワークシートを最初のブックにコピーします。
SourceBook1.combine(SourceBook2);

// 3番目のExcelファイルのワークシートを最初のブックにコピーします。
SourceBook1.combine(SourceBook3);

// 更新された最初のExcelファイルを新しいファイルとして保存します。
SourceBook1.save("C:\\Files\\CombinedFile.xlsx");
Javaを使用して複数のExcelファイルを1つに結合する

Javaを使用して複数のExcelファイルを1つに結合する

APIのWorkbookクラスは、Excelスプレッドシートの作成に使用されるメインクラスです。ネイティブExcelファイルを開いて保存することができます。また、Excelスプレッドシートを操作するためのいくつかのプロパティとメソッドも提供します。このクラスのcombine()メソッドは、現在のワークブックを別のワークブックオブジェクトと結合します。 Workbookクラスのsave()メソッドは、指定されたファイルパスに出力ファイルを保存します。

Javaを使用して複数のExcelファイルの特定のワークシートを1つに結合する

以下の手順に従って、プログラムで複数のExcelファイルの特定のワークシートを1つのファイルに簡単に組み合わせることができます。

  • ソースファイル1のWorkbookクラスのインスタンスを作成します
  • ソースファイル2のWorkbookクラスのインスタンスを作成します
  • 3つ以上のファイルのワークシートを組み合わせるには、上記の手順を繰り返します。
  • 宛先ファイルのWorkbookクラスのインスタンスを作成します
  • WorksheetCollectionクラスのadd()メソッドを使用してワークシートを追加します
  • copy()メソッドを呼び出して、指定したワークシートをソースファイル1から宛先ファイルにコピーします
  • copy()メソッドを呼び出して、指定したワークシートをソースファイル2から宛先ファイルにコピーします
  • setName()メソッドを使用して、宛先ファイルのワークシートの名前を変更します
  • Workbookクラスのsave()メソッドを呼び出して、宛先ファイルを保存します

次のコードサンプルは、Javaを使用して複数のExcelファイルの特定のワークシートを1つのファイルに結合する方法を示しています。

String sourceFile1 = "Quarter_1.xlsx";
String sourceFile2 = "Quarter_2.xlsx";

// 最初のExcelファイルを開きます。
Workbook excelA = new Workbook("C:\\Files\\" + sourceFile1);

// 2番目のExcelファイルを開きます。
Workbook excelB = new Workbook("C:\\Files\\" + sourceFile2);

// 宛先ワークブックを作成します。
Workbook destWorkbook = new Workbook();

// 最初のワークシートはデフォルトでワークブックに追加されます。 2番目のワークシートを追加します。
destWorkbook.getWorksheets().add();

// 最初のExcelファイルのJanワークシートを宛先ファイルにコピーします。
destWorkbook.getWorksheets().get(0).copy(excelA.getWorksheets().get("Jan"));

// 2番目のExcelファイルのJulワークシートを宛先ファイルにコピーします。
destWorkbook.getWorksheets().get(1).copy(excelB.getWorksheets().get("Jul"));

// デフォルトでは、ワークシート名はそれぞれ「Sheet1」と「Sheet2」です。
// それらに意味のある名前を付けましょう。
destWorkbook.getWorksheets().get(0).setName(sourceFile1 + " - Jan");
destWorkbook.getWorksheets().get(1).setName(sourceFile2 + " - Jul");

// 宛先ファイルを保存します。
destWorkbook.save("C:\\Files\\CombinedSpecificSheetsInFile.xlsx");
Javaを使用して複数のExcelファイルの特定のワークシートを1つに結合する

Javaを使用して複数のExcelファイルの特定のワークシートを1つに結合する

WorkbookクラスのgetWorksheets()プロパティメソッドは、Workbook内のすべてのワークシートのコレクションを返します。 add()メソッドを使用して、ワークシートのコレクションにワークシートを追加できます。

このAPIのWorksheetクラスは、単一のワークシートを表します。ワークシートを操作するためのいくつかのプロパティとメソッドを提供します。このクラスのcopy()メソッドは、コンテンツとフォーマットを別のワークシートからコピーします。 Worksheetクラスは、インデックスまたは名前で特定のワークシートを取得するためのget()メソッドも提供します。 setName()プロパティメソッドは、ワークシートの名前を設定します。

Javaを使用して複数のワークシートを1つのワークシートにマージ

以下の手順に従って、Excelファイルの複数のワークシートをプログラムで1つのワークシートに簡単にマージできます。

  • ソースファイルのWorkbookクラスのインスタンスを作成します
  • add()メソッドを使用して新しいワークシートを追加します
  • ソースワークシートを繰り返し処理し、次の手順を実行します。
    • createRange()メソッドを使用して、1つのワークシートのセルと列の範囲を作成します
    • copy()メソッドを使用して、ソース範囲から宛先範囲にデータをコピーします
  • Workbookクラスのsave()メソッドを呼び出して、出力ファイルを保存します

次のコードサンプルは、Javaを使用して複数のワークシートを1つのワークシートにマージする方法を示しています。

// ワークシートを含むExcelファイルを開きます。
// 1月、2月、3月、4月
Workbook workbook = new Workbook("C:\\Files\\Quarter_1.xlsx");

// Summary_sheetという名前のワークシートを追加します
Worksheet summarySheet = workbook.getWorksheets().add("Summary_sheet");

// ソースワークシートを繰り返し処理して、データをにコピーします。
// 要約ワークシート
String[] nameOfSourceWorksheets = { "Jan", "Feb", "Mar", "Apr" };
int totalRowCount = 0;

for (String sheetName : nameOfSourceWorksheets)
{
  // ワークシートを取得する
    Worksheet sourceSheet = workbook.getWorksheets().get(sheetName);

    Range sourceRange = null;
    Range destRange = null;

    // Janワークシートの場合は、すべての行と列を含めます。
    if (sheetName.equals("Jan"))
    {
        sourceRange = sourceSheet.getCells().getMaxDisplayRange();

        destRange = summarySheet.getCells().createRange(
                sourceRange.getFirstRow() + totalRowCount,
                sourceRange.getFirstColumn(),
                sourceRange.getRowCount(),
                sourceRange.getColumnCount());
    }
    // 他のワークシートの場合、
    // 最初の行(見出しを含む)を除外します。
    else
    {
        int mdatarow = sourceSheet.getCells().getMaxDataRow(); // Zero-based
        int mdatacol = sourceSheet.getCells().getMaxDataColumn(); // Zero-based
        sourceRange = sourceSheet.getCells().createRange(0 + 1, 0, mdatarow, mdatacol + 1);

        destRange = summarySheet.getCells().createRange(
                sourceRange.getFirstRow() + totalRowCount -1,
                sourceRange.getFirstColumn(),
                sourceRange.getRowCount(),
                sourceRange.getColumnCount());
    }

    // データ、フォーマット、オブジェクトの描画などを
    // ソース範囲からデスティネーション範囲。
    destRange.copy(sourceRange);
    totalRowCount = sourceRange.getRowCount() + totalRowCount;
}

// ブックを保存する 
workbook.save("C:\\Files\\Summarized.xlsx");
Javaを使用して複数のワークシートを1つのワークシートにマージ

Javaを使用して複数のワークシートを1つのワークシートにマージ

WorksheetクラスのgetCells()プロパティメソッドは、ワークシートで使用可能なセルのコレクションを提供します。 APIのCellsクラスは、CellRowなどのセルに関連するオブジェクトのコレクションを表します。getMaxDisplayRange()プロパティCellsクラスのメソッドは、データ、結合されたセル、および形状を含む最大範囲を提供します。 Rangeクラスは、スプレッドシート内のセルの範囲を表します。

Cellsクラスは、セルの範囲を作成するための次のメソッドを提供します。

  • createRange(int firstIndex、int number、boolean isVertical)メソッドを使用して、セルの行またはセルの列からRangeオブジェクトを作成します。
  • createRange(int firstRow、int firstColumn、int totalRows、int totalColumns)メソッドを使用して、セルの範囲からRangeオブジェクトを作成します。
  • createRange(java.lang.String address)メソッドは、範囲のアドレスからRangeオブジェクトを作成します。
  • createRange(java.lang.String upperLeftCell、java.lang.String lowerRightCell)メソッドは、セルの範囲からRangeオブジェクトを作成します。

Rangeクラスのcopy()メソッドは、すべての種類のデータ(数式を含む)、書式設定、オブジェクトの描画などをソース範囲から宛先範囲にコピーします。

Javaを使用して複数のワークシートの列を1つに統合

以下の手順に従って、プログラムで複数のワークシートの列を1つのワークシートに簡単にマージできます。

  • ソースファイルのWorkbookクラスのインスタンスを作成します
  • add()メソッドを使用して新しいワークシートを追加します
  • ソースワークシートを繰り返し処理し、次の手順を実行します。
    • copyColumn()メソッドを使用して、ソースワークシートのセルと列インデックスを使用してすべての列を1つずつコピーします
  • Workbookクラスのsave()メソッドを呼び出して、出力ファイルを保存します

次のコードサンプルは、Javaを使用して複数のワークシートの列を1つのワークシートに統合する方法を示しています。

// ブックを開きます。
Workbook workbook = new Workbook("C:\\Files\\sample.xlsx");

// Summary_sheetという名前のワークシートを追加します
Worksheet summarySheet = workbook.getWorksheets().add("Summary_sheet");

// ワークシートを繰り返し処理して、列をにコピーします
// 要約ワークシート
String[] nameOfSourceWorksheets = { "Products", "Sales", "Customers" };
int totalCol = 0; 

for (String sheetName : nameOfSourceWorksheets) {
  Worksheet sourceSheet = workbook.getWorksheets().get(sheetName);

  if (sheetName.equals("Products")) {
    // ワークシートの列のコレクションを取得する
    ColumnCollection columns = sourceSheet.getCells().getColumns();

    // 列をsummaySheetにコピーします
    for (Column column : (Iterable<Column>) columns)
    {
      summarySheet.getCells().copyColumn(sourceSheet.getCells(), column.getIndex(), totalCol);
      totalCol = totalCol + 1;
    }
    }
  else {
    // ワークシートの列のコレクションを取得する
    ColumnCollection columns = sourceSheet.getCells().getColumns();

    // 列をsummaySheetにコピーします
    for (Column column : (Iterable<Column>) columns)
    {
      summarySheet.getCells().copyColumn(sourceSheet.getCells(), column.getIndex(), totalCol);
      totalCol = totalCol + 1;
    }
  }
}

// Excelファイルを保存します。
workbook.save("C:\\Files\\CopyingColumns_out.xlsx");
Javaを使用して複数のワークシートの列を1つに統合

Javaを使用して複数のワークシートの列を1つに統合

CellsクラスのgetColumns()プロパティメソッドは、ワークシートで使用可能な列のコレクションを提供します。 ColumnCollectionクラスはワークシートの個々の列のコレクションを表し、Columnクラスはワークシートの単一の列を表します。

CellsクラスのcopyColumn()メソッドは、列全体のデータと形式をコピーします。 Cellsクラスは、PasteOptions、列番号、ソース、および宛先の合計列などを使用してデータをコピーするためのオーバーロードされたcopyColumn()メソッドも提供します。

無料ライセンスを取得する

無料の一時ライセンスをリクエストすることで、評価の制限なしにAPIを試すことができます。

結論

この記事では、複数のExcelファイルを1つのファイルに結合する方法を学習しました。また、Javaを使用して複数のExcelファイルの特定のワークシートを組み合わせる方法も学びました。さらに、プログラムで複数のワークシートを1つのワークシートにマージする方法を学習しました。この記事では、Javaを使用して複数のワークシートの列を1つに統合する方法についても説明しました。 ドキュメントを使用して、JavaAPIのAspose.Cellsについて詳しく知ることができます。ご不明な点がございましたら、フォーラムまでお気軽にお問い合わせください。

関連項目