En este artículo, aprenderá cómo copiar hojas de varios libros de Excel en un libro de trabajo usando C#. También aprenderá cómo copiar datos de varias hojas de trabajo en una hoja. Empecemos.

API de C# para fusionar varios archivos de Excel

Aspose.Cells for .NET es una conocida API de manipulación de hojas de cálculo que le permite crear y procesar archivos de Excel desde sus aplicaciones .NET. Puede descargar los archivos binarios de la API o instalarlos mediante NuGet.

PM> Install-Package Aspose.Cells

Combine múltiples archivos de Excel en uno usando C#

A veces, necesita fusionar varios archivos de Excel en un solo archivo. Desea copiar hojas de trabajo de los libros de trabajo de origen al libro de trabajo de destino como se muestra a continuación. Los documentos de Excel pueden ser de cualquier versión, como Excel 97, Excel 2010 o Excel 2016.

Combine múltiples archivos de Excel en uno usando C#

Fig. 1: Combinar archivos de Excel

El siguiente código de ejemplo muestra cómo combinar varios archivos de Excel en uno usando C#.

// Abra el primer archivo de Excel.
Workbook SourceBook1 = new Workbook("Excel A.xlsx");

// Abra el segundo archivo de Excel.
Workbook SourceBook2 = new Workbook("Excel B.xlsx");

// Abra el tercer archivo de Excel.
Workbook SourceBook3 = new Workbook("Excel C.xlsx");

// Copie las hojas de trabajo del segundo archivo de Excel al primer libro de trabajo.
SourceBook1.Combine(SourceBook2);

// Copie las hojas de trabajo del tercer archivo de Excel al primer libro de trabajo.
SourceBook1.Combine(SourceBook3);

// Guarde el primer archivo de Excel actualizado como un archivo nuevo.
SourceBook1.Save("CombinedFile.xlsx");

Combine hojas de trabajo específicas de archivos de Excel usando C#

El código anterior copia todas las hojas de trabajo de los archivos de origen en el archivo de destino. Sin embargo, es posible que desee copiar hojas de trabajo específicas de los archivos de origen al archivo de destino. Por ejemplo, tiene dos archivos de Excel y cada uno tiene tres hojas de cálculo denominadas Ventas, Empleados y Gastos. Solo desea copiar la hoja de trabajo de Ventas de ambos archivos al archivo de destino como se muestra en la siguiente figura.

Combine hojas de trabajo específicas de archivos de Excel usando C#

Fig. 2: Combine hojas de trabajo específicas de archivos de Excel

El siguiente código de ejemplo muestra cómo combinar hojas de trabajo específicas de archivos de origen en un archivo de destino mediante C#.

// Abra un archivo de Excel A.
Workbook excelA = new Workbook("Excel A.xlsx");

// Abra el archivo Excel B.
Workbook excelB = new Workbook("Excel B.xlsx");

// Crear libro de trabajo de destino.
Workbook destWorkbook = new Workbook();
// La primera hoja de cálculo se agrega de forma predeterminada al Libro de trabajo. Agregue la segunda hoja de trabajo.
destWorkbook.Worksheets.Add();

// Copie la hoja de trabajo de Ventas del archivo Excel A al archivo de destino.
destWorkbook.Worksheets[0].Copy(excelA.Worksheets["Sales"]);

// Copie la hoja de trabajo de Ventas del archivo Excel B al archivo de destino.
destWorkbook.Worksheets[1].Copy(excelB.Worksheets["Sales"]);

// De forma predeterminada, los nombres de las hojas de trabajo son "Hoja1" y "Hoja2" respectivamente.
// Vamos a darles nombres significativos.
destWorkbook.Worksheets[0].Name = excelA.FileName + " - Sales";
destWorkbook.Worksheets[1].Name = excelB.FileName + " - Sales";

// Guarde el archivo de destino.
destWorkbook.Save("CombinedFile.xlsx");

Combine varias hojas de trabajo en una usando C#

A veces, necesita copiar datos de varias hojas de trabajo en una hoja de trabajo. Por ejemplo, tiene algunas hojas de trabajo en un archivo de Excel que contienen información sobre diferentes productos y desea combinar estas hojas en una hoja de trabajo de resumen, como esta:

Combine varias hojas de trabajo en una usando C#

Fig. 3: Combinar varias hojas de trabajo en una

El siguiente fragmento de código muestra cómo copiar datos de varias hojas de trabajo en una hoja de trabajo usando C#.

// Abra un archivo de Excel que contenga las hojas de trabajo:
// Productos1, Productos2 y Productos3
Workbook workbook = new Workbook("Products.xlsx");

// Agregue una hoja de trabajo llamada Summary_sheet
Worksheet summarySheet = workbook.Worksheets.Add("Summary_sheet");

// Iterar sobre las hojas de trabajo de origen cuyos datos desea copiar en el
// hoja de resumen
string[] nameOfSourceWorksheets = { "Products1", "Products2", "Products3" };
int totalRowCount = 0;

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

    Range sourceRange;
    Range destRange;
    // En el caso de la hoja de trabajo Productos1, incluya todas las filas y columnas.
    if (sheetName.Equals("Products1"))
    {
        sourceRange = sourceSheet.Cells.MaxDisplayRange;
        
        destRange = summarySheet.Cells.CreateRange(
                sourceRange.FirstRow + totalRowCount,
                sourceRange.FirstColumn,
                sourceRange.RowCount,
                sourceRange.ColumnCount);
    }
    // En el caso de las hojas de trabajo Products2 y Products3,
    // excluir la primera fila (que contiene encabezados).
    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 datos, formato, objetos de dibujo, etc. de un
    // rango de origen al rango de destino.
    destRange.Copy(sourceRange);
    totalRowCount = sourceRange.RowCount + totalRowCount;
}

// Guardar el libro de trabajo 
workbook.Save("Summarized.xlsx");

Conclusión

En este artículo, ha aprendido cómo combinar mediante programación varios archivos de Excel en uno. Puede copiar todas las hojas de trabajo de un archivo de origen o algunas específicas en el archivo de destino. También aprendió cómo combinar datos de varias hojas de trabajo en una hoja de trabajo. Consulte la documentación de Aspose.Cells para .NET para obtener más información. Si tiene alguna pregunta, no dude en preguntar en nuestro Foro de soporte. Les responderemos en unas horas.

Ver también