在本文中,您将学习如何使用 C# 将多个 Excel 工作簿中的工作表复制到一个工作簿中。您还将学习如何将多个工作表中的数据复制到一张工作表中。开始吧。
C# API 合并多个 Excel 文件
Aspose.Cells for .NET 是一个著名的电子表格操作 API,可让您在 .NET 应用程序中创建和处理 Excel 文件。您可以 下载 API 的二进制文件或使用 NuGet 安装它。
PM> Install-Package Aspose.Cells
使用 C# 将多个 Excel 文件合并为一个
有时,您需要将多个 Excel 文件合并为一个文件。您希望将工作表从源工作簿复制到目标工作簿,如下所示。 Excel 文档可以是任何版本,例如 Excel 97、Excel 2010 或 Excel 2016。

图 1:合并 Excel 文件
以下示例代码展示了如何使用 C# 将多个 Excel 文件合并为一个。
// 打开第一个excel文件。
Workbook SourceBook1 = new Workbook("Excel A.xlsx");
// 打开第二个excel文件。
Workbook SourceBook2 = new Workbook("Excel B.xlsx");
// 打开第三个excel文件。
Workbook SourceBook3 = new Workbook("Excel C.xlsx");
// 将第二个 Excel 文件的工作表复制到第一个工作簿。
SourceBook1.Combine(SourceBook2);
// 将第三个 Excel 文件的工作表复制到第一个工作簿。
SourceBook1.Combine(SourceBook3);
// 将更新的第一个 excel 文件另存为新文件。
SourceBook1.Save("CombinedFile.xlsx");
使用 C# 组合 Excel 文件的特定工作表
上面的代码将源文件中的所有工作表复制到目标文件。但是,您可能希望将特定工作表从源文件复制到目标文件。例如,您有两个 Excel 文件,每个文件都有三个名为 Sales、Employees 和 Expenses 的工作表。您只想将销售工作表从这两个文件复制到目标文件,如下图所示。

图 2:结合 Excel 文件的特定工作表
以下示例代码展示了如何使用 C# 将源文件的特定工作表合并到目标文件中。
// 打开 Excel A 文件。
Workbook excelA = new Workbook("Excel A.xlsx");
// 打开 Excel B 文件。
Workbook excelB = new Workbook("Excel B.xlsx");
// 创建目标工作簿。
Workbook destWorkbook = new Workbook();
// 第一个工作表默认添加到工作簿。添加第二个工作表。
destWorkbook.Worksheets.Add();
// 将 Excel A 文件的销售工作表复制到目标文件。
destWorkbook.Worksheets[0].Copy(excelA.Worksheets["Sales"]);
// 将 Excel B 文件的销售工作表复制到目标文件。
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# 将多个工作表合并为一个
有时,您需要将多个工作表中的数据复制到一个工作表中。例如,您在 Excel 文件中有一些工作表,其中包含有关不同产品的信息,并且您希望将这些工作表合并到一个摘要工作表中,如下所示:

图 3:将多个工作表合并为一个
以下代码片段显示了如何使用 C# 将数据从多个工作表复制到一个工作表中。
// 打开包含工作表的 Excel 文件:
// 产品 1、产品 2 和产品 3
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 文件合并为一个。您可以将源文件的所有工作表或特定工作表复制到目标文件。您还学习了如何将多个工作表的数据合并到一个工作表中。请查看 Aspose.Cells for .NET 的文档 了解更多信息。如果您有任何问题,请随时在我们的 支持论坛 中提问。我们将在几个小时内回复他们。