Neste artigo, você aprenderá a copiar planilhas de várias pastas de trabalho do Excel em uma pasta de trabalho usando C#. Você também aprenderá a copiar dados de várias planilhas em uma planilha. Vamos começar.

API C# para mesclar vários arquivos do Excel

Aspose.Cells for .NET é uma API de manipulação de planilhas bem conhecida que permite criar e processar arquivos Excel a partir de seus aplicativos .NET. Você pode baixar os binários da API ou instalá-la usando NuGet.

PM> Install-Package Aspose.Cells

Combine vários arquivos do Excel em um usando C

Às vezes, você precisa mesclar vários arquivos do Excel em um arquivo. Você deseja copiar planilhas das pastas de trabalho de origem para a pasta de trabalho de destino, conforme mostrado abaixo. Os documentos do Excel podem ser de qualquer versão, como Excel 97, Excel 2010 ou Excel 2016.

Combine vários arquivos do Excel em um usando C #

Fig 1: Combinar arquivos do Excel

O código de exemplo a seguir mostra como combinar vários arquivos do Excel em um usando C#.

// Abra o primeiro arquivo do Excel.
Workbook SourceBook1 = new Workbook("Excel A.xlsx");

// Abra o segundo arquivo do Excel.
Workbook SourceBook2 = new Workbook("Excel B.xlsx");

// Abra o terceiro arquivo do Excel.
Workbook SourceBook3 = new Workbook("Excel C.xlsx");

// Copie as planilhas do segundo arquivo do Excel para a primeira pasta de trabalho.
SourceBook1.Combine(SourceBook2);

// Copie as planilhas do terceiro arquivo do Excel para a primeira pasta de trabalho.
SourceBook1.Combine(SourceBook3);

// Salve o primeiro arquivo excel atualizado como um novo arquivo.
SourceBook1.Save("CombinedFile.xlsx");

Combine planilhas específicas de arquivos do Excel usando C

O código acima copia todas as planilhas nos arquivos de origem para o arquivo de destino. No entanto, você pode querer copiar planilhas específicas dos arquivos de origem para o arquivo de destino. Por exemplo, você tem dois arquivos do Excel e cada um tem três planilhas denominadas Vendas, Funcionários e Despesas. Você só deseja copiar a planilha de vendas de ambos os arquivos para o arquivo de destino, conforme mostrado na figura a seguir.

Combine planilhas específicas de arquivos do Excel usando C #

Fig 2: Combinar planilhas específicas de arquivos do Excel

O código de exemplo a seguir mostra como combinar planilhas específicas de arquivos de origem no arquivo de destino usando C#.

// Abra o arquivo Excel A.
Workbook excelA = new Workbook("Excel A.xlsx");

// Abra o arquivo Excel B.
Workbook excelB = new Workbook("Excel B.xlsx");

// Criar pasta de trabalho de destino.
Workbook destWorkbook = new Workbook();
// A primeira planilha é adicionada por padrão à pasta de trabalho. Adicione a segunda planilha.
destWorkbook.Worksheets.Add();

// Copie a planilha de vendas do arquivo Excel A para o arquivo de destino.
destWorkbook.Worksheets[0].Copy(excelA.Worksheets["Sales"]);

// Copie a planilha de vendas do arquivo Excel B para o arquivo de destino.
destWorkbook.Worksheets[1].Copy(excelB.Worksheets["Sales"]);

// Por padrão, os nomes das planilhas são "Sheet1" e "Sheet2", respectivamente.
// Vamos dar-lhes nomes significativos.
destWorkbook.Worksheets[0].Name = excelA.FileName + " - Sales";
destWorkbook.Worksheets[1].Name = excelB.FileName + " - Sales";

// Salve o arquivo de destino.
destWorkbook.Save("CombinedFile.xlsx");

Mesclar várias planilhas em uma usando C

Às vezes, você precisa copiar dados de várias planilhas em uma planilha. Por exemplo, você tem algumas planilhas em um arquivo do Excel que contém informações sobre diferentes produtos e deseja mesclar essas planilhas em uma planilha de resumo, como esta:

Mesclar várias planilhas em uma usando C #

Fig 3: Mesclar várias planilhas em uma

O trecho de código a seguir mostra como copiar dados de várias planilhas em uma planilha usando C#.

// Abra um arquivo do Excel que contenha as planilhas:
// Produtos1, Produtos2 e Produtos3
Workbook workbook = new Workbook("Products.xlsx");

// Adicione uma planilha chamada Summary_sheet
Worksheet summarySheet = workbook.Worksheets.Add("Summary_sheet");

// Iterar sobre planilhas de origem cujos dados você deseja copiar para o
// planilha resumo
string[] nameOfSourceWorksheets = { "Products1", "Products2", "Products3" };
int totalRowCount = 0;

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

    Range sourceRange;
    Range destRange;
    // No caso da planilha Produtos1, inclua todas as linhas e colunas.
    if (sheetName.Equals("Products1"))
    {
        sourceRange = sourceSheet.Cells.MaxDisplayRange;
        
        destRange = summarySheet.Cells.CreateRange(
                sourceRange.FirstRow + totalRowCount,
                sourceRange.FirstColumn,
                sourceRange.RowCount,
                sourceRange.ColumnCount);
    }
    // No caso de planilhas de Produtos2 e Produtos3,
    // exclua a primeira linha (que contém títulos).
    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);
    }

    // Copia dados, formatação, objetos de desenho etc. de um
    // intervalo de origem ao intervalo de destino.
    destRange.Copy(sourceRange);
    totalRowCount = sourceRange.RowCount + totalRowCount;
}

// Salve a pasta de trabalho 
workbook.Save("Summarized.xlsx");

Conclusão

Neste artigo, você aprendeu como combinar programaticamente vários arquivos do Excel em um. Você pode copiar todas as planilhas de um arquivo de origem ou as específicas para o arquivo de destino. Você também aprendeu como combinar dados de várias planilhas em uma planilha. Por favor, verifique a documentação do Aspose.Cells para .NET para mais informações. Se você tiver alguma dúvida, sinta-se à vontade para perguntar em nosso Fórum de Suporte. Vamos respondê-los em algumas horas.

Veja também