この記事では、C#を使用して複数のExcelブックから1つのブックにシートをコピーする方法を学習します。また、複数のワークシートから1つのシートにデータをコピーする方法についても学習します。はじめましょう。

複数のExcelファイルをマージするためのC#API

Aspose.Cells for .NETは、.NETアプリケーション内からExcelファイルを作成および処理できる有名なスプレッドシート操作APIです。 APIのバイナリをダウンロードするか、NuGetを使用してインストールすることができます。

PM> Install-Package Aspose.Cells

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

場合によっては、複数のExcelファイルを1つのファイルにマージする必要があります。以下に示すように、元のワークブックからコピー先のワークブックにワークシートをコピーします。 Excelドキュメントは、Excel 97、Excel 2010、Excel2016などの任意のバージョンにすることができます。

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

図1:Excelファイルを組み合わせる

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

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

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

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

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

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

// 更新された最初のExcelファイルを新しいファイルとして保存します。
SourceBook1.Save("CombinedFile.xlsx");

C#を使用してExcelファイルの特定のワークシートを組み合わせる

上記のコードは、ソースファイル内のすべてのワークシートを宛先ファイルにコピーします。ただし、特定のワークシートをソースファイルから宛先ファイルにコピーすることもできます。たとえば、2つのExcelファイルがあり、それぞれにSales、Employees、およびExpensesという名前の3つのワークシートがあります。次の図に示すように、両方のファイルから宛先ファイルに販売ワークシートをコピーするだけです。

C#を使用してExcelファイルの特定のワークシートを組み合わせる

図2:Excelファイルの特定のワークシートを組み合わせる

次のサンプルコードは、C#を使用してソースファイルの特定のワークシートを宛先ファイルに結合する方法を示しています。

// ExcelAファイルを開きます。
Workbook excelA = new Workbook("Excel A.xlsx");

// ExcelBファイルを開きます。
Workbook excelB = new Workbook("Excel B.xlsx");

// 宛先ワークブックを作成します。
Workbook destWorkbook = new Workbook();
// 最初のワークシートはデフォルトでワークブックに追加されます。 2番目のワークシートを追加します。
destWorkbook.Worksheets.Add();

// ExcelAファイルの販売ワークシートを宛先ファイルにコピーします。
destWorkbook.Worksheets[0].Copy(excelA.Worksheets["Sales"]);

// ExcelBファイルの販売ワークシートを宛先ファイルにコピーします。
destWorkbook.Worksheets[1].Copy(excelB.Worksheets["Sales"]);

// デフォルトでは、ワークシート名はそれぞれ「Sheet1」と「Sheet2」です。
// それらに意味のある名前を付けましょう。
destWorkbook.Worksheets[0].Name = excelA.FileName + " - Sales";
destWorkbook.Worksheets[1].Name = excelB.FileName + " - Sales";

// 宛先ファイルを保存します。
destWorkbook.Save("CombinedFile.xlsx");

C#を使用して複数のワークシートを1つにマージする

複数のワークシートから1つのワークシートにデータをコピーする必要がある場合があります。たとえば、Excelファイルにさまざまな製品に関する情報を含むワークシートがいくつかあり、これらのシートを次のように1つの要約ワークシートにマージするとします。

C#を使用して複数のワークシートを1つにマージする

図3:複数のワークシートを1つにマージ

次のコードスニペットは、C#を使用して複数のワークシートから1つのワークシートにデータをコピーする方法を示しています。

// ワークシートを含むExcelファイルを開きます。
// Products1、Products2、Products3
Workbook workbook = new Workbook("Products.xlsx");

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

// データをコピーするソースワークシートを繰り返し処理します
// 要約ワークシート
string[] nameOfSourceWorksheets = { "Products1", "Products2", "Products3" };
int totalRowCount = 0;

foreach (string sheetName in nameOfSourceWorksheets)
{
    Worksheet sourceSheet = workbook.Worksheets[sheetName];

    Range sourceRange;
    Range destRange;
    // Products1ワークシートの場合は、すべての行と列を含めます。
    if (sheetName.Equals("Products1"))
    {
        sourceRange = sourceSheet.Cells.MaxDisplayRange;
        
        destRange = summarySheet.Cells.CreateRange(
                sourceRange.FirstRow + totalRowCount,
                sourceRange.FirstColumn,
                sourceRange.RowCount,
                sourceRange.ColumnCount);
    }
    // Products2およびProducts3ワークシートの場合、
    // 最初の行(見出しを含む)を除外します。
    else
    {
        int mdatarow = sourceSheet.Cells.MaxDataRow; // Zero-based
        int mdatacol = sourceSheet.Cells.MaxDataColumn; // Zero-based
        sourceRange = sourceSheet.Cells.CreateRange(0 + 1, 0, mdatarow, mdatacol + 1);

        destRange = summarySheet.Cells.CreateRange(
                sourceRange.FirstRow + totalRowCount -1,
                sourceRange.FirstColumn,
                sourceRange.RowCount,
                sourceRange.ColumnCount);
    }

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

// ブックを保存する 
workbook.Save("Summarized.xlsx");

結論

この記事では、複数のExcelファイルをプログラムで1つに結合する方法を学習しました。ソースファイルのすべてのワークシートまたは特定のワークシートを宛先ファイルにコピーできます。また、複数のワークシートのデータを1つのワークシートに結合する方法も学習しました。詳細については、Aspose.Cellsfor.NETのドキュメントを確認してください。ご不明な点がございましたら、サポートフォーラムまでお気軽にお問い合わせください。数時間以内にお答えします。

関連項目