在本文中,您将学习如何使用 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。

使用 C# 将多个 Excel 文件合并为一个

图 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 的工作表。您只想将销售工作表从这两个文件复制到目标文件,如下图所示。

使用 C# 组合 Excel 文件的特定工作表

图 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 文件中有一些工作表,其中包含有关不同产品的信息,并且您希望将这些工作表合并到一个摘要工作表中,如下所示:

使用 C# 将多个工作表合并为一个

图 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 的文档 了解更多信息。如果您有任何问题,请随时在我们的 支持论坛 中提问。我们将在几个小时内回复他们。

也可以看看