この記事では、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などの任意のバージョンにすることができます。

図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つのワークシートがあります。次の図に示すように、両方のファイルから宛先ファイルに販売ワークシートをコピーするだけです。

図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つの要約ワークシートにマージするとします。

図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のドキュメントを確認してください。ご不明な点がございましたら、サポートフォーラムまでお気軽にお問い合わせください。数時間以内にお答えします。