Combine múltiples archivos de Excel en uno usando Java

Tiene varios libros de Excel y desea combinarlos en un solo archivo para generar informes o mantener los datos en un solo lugar. Como desarrollador de Java, puede fusionar fácilmente varios archivos de Excel en un solo archivo mediante programación. En este artículo, aprenderá a combinar varios archivos de Excel en uno usando Java.

Los siguientes temas se discuten/tratan en este artículo:

API de Java para fusionar archivos de Excel

Para fusionar varios archivos Excel, utilizaré Aspose.Cells for Java API. Esta API le permite crear, manipular, convertir, proteger o imprimir hojas de cálculo sin depender de Microsoft Excel. Le permite realizar funciones de automatización de Excel mediante programación en sus aplicaciones Java.

Puede descargar el JAR de la API o simplemente agregar la siguiente configuración pom.xml en su aplicación Java basada en Maven para probar los ejemplos de código que se mencionan a continuación.

<repository>
    <id>AsposeJavaAPI</id>
    <name>Aspose Java API</name>
    <url>https://repository.aspose.com/repo/</url>
</repository>
<dependency>
    <groupId>com.aspose</groupId>
    <artifactId>aspose-cells</artifactId>
    <version>21.8</version>
</dependency>

Combine múltiples archivos de Excel en uno usando Java

Puede combinar fácilmente varios archivos de Excel en un solo archivo mediante programación siguiendo los pasos que se mencionan a continuación:

  • Cree una instancia de la clase Libro de trabajo con el primer archivo fuente
  • Cree una instancia de la clase Libro de trabajo con el segundo archivo fuente
  • Repita el paso anterior para combinar más de dos archivos
  • Llame al método combine() con la segunda instancia del archivo fuente
  • Repita el paso anterior para todos los archivos de origen uno por uno
  • Guarde el archivo de salida llamando al método save() de la clase Workbook

El siguiente ejemplo de código muestra cómo combinar varios archivos de Excel en un solo archivo mediante Java.

// Abra el primer archivo de Excel.
Workbook SourceBook1 = new Workbook("C:\\Files\\Quarter_1.xlsx");

// Abra el segundo archivo de Excel.
Workbook SourceBook2 = new Workbook("C:\\Files\\Quarter_2.xlsx");

// Abra el tercer archivo de Excel.
Workbook SourceBook3 = new Workbook("C:\\Files\\Quarter_3.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("C:\\Files\\CombinedFile.xlsx");
Combine múltiples archivos de Excel en uno usando Java

Combine múltiples archivos de Excel en uno usando Java

La clase Libro de trabajo de la API es la clase principal utilizada para crear una hoja de cálculo de Excel. Le permite abrir y guardar los archivos nativos de Excel. También proporciona varias propiedades y métodos para trabajar con la hoja de cálculo de Excel. El método combine() de esta clase combina el libro actual con otro objeto Workbook. El método save() de la clase Workbook guarda el archivo de salida en la ruta de archivo especificada.

Combine hojas de trabajo específicas de varios archivos de Excel en uno usando Java

Puede combinar fácilmente hojas de trabajo específicas de varios archivos de Excel en un solo archivo mediante programación siguiendo los pasos que se mencionan a continuación:

  • Cree una instancia de la clase Libro de trabajo para el archivo fuente 1
  • Cree una instancia de la clase Libro de trabajo para el archivo fuente 2
  • Repita el paso anterior para combinar hojas de trabajo de más de dos archivos
  • Cree una instancia de la clase Libro de trabajo para el archivo de destino
  • Agregue hojas de trabajo usando el método add() de la clase WorksheetCollection
  • Llame al método copy() para copiar la hoja de trabajo especificada del archivo de origen 1 al archivo de destino
  • Llame al método copy () para copiar la hoja de trabajo especificada del archivo de origen 2 al archivo de destino
  • Cambie el nombre de las hojas de trabajo en el archivo de destino utilizando el método setName()
  • Guarde el archivo de destino llamando al método save() de la clase Workbook

El siguiente ejemplo de código muestra cómo combinar hojas de cálculo específicas de varios archivos de Excel en un solo archivo mediante Java.

String sourceFile1 = "Quarter_1.xlsx";
String sourceFile2 = "Quarter_2.xlsx";

// Abra el primer archivo de Excel.
Workbook excelA = new Workbook("C:\\Files\\" + sourceFile1);

// Abra el segundo archivo de Excel.
Workbook excelB = new Workbook("C:\\Files\\" + sourceFile2);

// 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.getWorksheets().add();

// Copie la hoja de cálculo de enero del primer archivo de Excel en el archivo de destino.
destWorkbook.getWorksheets().get(0).copy(excelA.getWorksheets().get("Jan"));

// Copie la hoja de cálculo de julio del segundo archivo de Excel en el archivo de destino.
destWorkbook.getWorksheets().get(1).copy(excelB.getWorksheets().get("Jul"));

// De forma predeterminada, los nombres de las hojas de trabajo son "Hoja1" y "Hoja2" respectivamente.
// Vamos a darles nombres significativos.
destWorkbook.getWorksheets().get(0).setName(sourceFile1 + " - Jan");
destWorkbook.getWorksheets().get(1).setName(sourceFile2 + " - Jul");

// Guarde el archivo de destino.
destWorkbook.save("C:\\Files\\CombinedSpecificSheetsInFile.xlsx");
Combine hojas de trabajo específicas de varios archivos de Excel en uno usando Java

Combine hojas de trabajo específicas de varios archivos de Excel en uno usando Java

El método de propiedad getWorksheets() de la clase Workbook devuelve una colección de todas las hojas de trabajo en un Workbook. Puede agregar una hoja de trabajo a la colección de hojas de trabajo usando el método add().

La clase Hoja de trabajo de esta API representa una sola hoja de trabajo. Proporciona varias propiedades y métodos para trabajar con una hoja de cálculo. El método copy() de esta clase copia el contenido y los formatos de otra hoja de trabajo. La clase Worksheet también proporciona métodos get() para obtener una hoja de trabajo específica por su índice o por su nombre. El método de propiedad setName() establece el nombre de la hoja de trabajo.

Combine varias hojas de trabajo en una hoja de trabajo usando Java

Puede combinar fácilmente varias hojas de trabajo de un archivo de Excel en una sola hoja de trabajo mediante programación siguiendo los pasos que se mencionan a continuación:

  • Cree una instancia de la clase Libro de trabajo para el archivo fuente
  • Agregar una nueva hoja de trabajo usando el método add()
  • Repita las hojas de trabajo de origen y haga lo siguiente:
    • cree un rango de celdas y columnas para una hoja de trabajo usando el método createRange()
    • Copie datos de un rango de origen al rango de destino usando el método copy()
  • Guarde el archivo de salida llamando al método save() de la clase Workbook

El siguiente ejemplo de código muestra cómo fusionar varias hojas de trabajo en una hoja de trabajo usando Java.

// Abra un archivo de Excel que contenga las hojas de trabajo:
// Ene, Feb, Mar y Abr
Workbook workbook = new Workbook("C:\\Files\\Quarter_1.xlsx");

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

// Iterar sobre las hojas de trabajo de origen para copiar datos en el
// hoja de resumen
String[] nameOfSourceWorksheets = { "Jan", "Feb", "Mar", "Apr" };
int totalRowCount = 0;

for (String sheetName : nameOfSourceWorksheets)
{
  // Obtener hoja de trabajo
    Worksheet sourceSheet = workbook.getWorksheets().get(sheetName);

    Range sourceRange = null;
    Range destRange = null;

    // En el caso de la hoja de trabajo de enero, incluya todas las filas y columnas.
    if (sheetName.equals("Jan"))
    {
        sourceRange = sourceSheet.getCells().getMaxDisplayRange();

        destRange = summarySheet.getCells().createRange(
                sourceRange.getFirstRow() + totalRowCount,
                sourceRange.getFirstColumn(),
                sourceRange.getRowCount(),
                sourceRange.getColumnCount());
    }
    // En el caso de otras hojas de trabajo,
    // excluir la primera fila (que contiene encabezados).
    else
    {
        int mdatarow = sourceSheet.getCells().getMaxDataRow(); // Zero-based
        int mdatacol = sourceSheet.getCells().getMaxDataColumn(); // Zero-based
        sourceRange = sourceSheet.getCells().createRange(0 + 1, 0, mdatarow, mdatacol + 1);

        destRange = summarySheet.getCells().createRange(
                sourceRange.getFirstRow() + totalRowCount -1,
                sourceRange.getFirstColumn(),
                sourceRange.getRowCount(),
                sourceRange.getColumnCount());
    }

    // Copia datos, formato, objetos de dibujo, etc. de un
    // rango de origen al rango de destino.
    destRange.copy(sourceRange);
    totalRowCount = sourceRange.getRowCount() + totalRowCount;
}

// Guardar el libro de trabajo 
workbook.save("C:\\Files\\Summarized.xlsx");
Combine varias hojas de trabajo en una hoja de trabajo usando Java

Combine varias hojas de trabajo en una hoja de trabajo usando Java

El método de propiedad getCells() de la clase Worksheet proporciona la colección de celdas disponibles en la hoja de trabajo. La clase Cells de la API representa una colección de objetos relevantes para una celda, como Cell, Row, etc. La propiedad getMaxDisplayRange() El método de la clase Cells proporciona el rango máximo que incluye datos, celdas combinadas y formas. La clase Rango representa un rango de celdas dentro de una hoja de cálculo.

La clase Cells proporciona los siguientes métodos para crear un rango de celdas:

  • createRange(int firstIndex, int number, boolean isVertical) para crear un objeto Range a partir de filas de celdas o columnas de celdas.
  • createRange(int firstRow, int firstColumn, int totalRows, int totalColumns) para crear un objeto Range a partir de un rango de celdas.
  • El método createRange(java.lang.String address) crea un objeto Range a partir de una dirección del rango.
  • El método createRange(java.lang.String upperLeftCell, java.lang.String lowerRightCell) crea un objeto Range a partir de un rango de celdas.

El método copy() de la clase Range copia todo tipo de datos (incluidas fórmulas), formato, objetos de dibujo, etc. desde un rango de origen al rango de destino.

Consolide columnas de varias hojas de trabajo en una usando Java

Puede combinar fácilmente columnas de varias hojas de trabajo en una sola hoja de trabajo mediante programación siguiendo los pasos que se mencionan a continuación:

  • Cree una instancia de la clase Libro de trabajo para el archivo fuente
  • Agregar una nueva hoja de trabajo usando el método add()
  • Repita las hojas de trabajo de origen y haga lo siguiente:
    • Copie todas las columnas una por una usando el método copyColumn() con las celdas de las hojas de trabajo de origen y el índice de columna
  • Guarde el archivo de salida llamando al método save() de la clase Workbook

El siguiente ejemplo de código muestra cómo consolidar columnas de varias hojas de trabajo en una hoja de trabajo usando Java.

// Abra un libro de trabajo.
Workbook workbook = new Workbook("C:\\Files\\sample.xlsx");

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

// Iterar sobre hojas de trabajo para copiar columnas al
// hoja de resumen
String[] nameOfSourceWorksheets = { "Products", "Sales", "Customers" };
int totalCol = 0; 

for (String sheetName : nameOfSourceWorksheets) {
  Worksheet sourceSheet = workbook.getWorksheets().get(sheetName);

  if (sheetName.equals("Products")) {
    // Obtener la colección de columnas de la hoja de trabajo
    ColumnCollection columns = sourceSheet.getCells().getColumns();

    // copiar columna a summaySheet
    for (Column column : (Iterable<Column>) columns)
    {
      summarySheet.getCells().copyColumn(sourceSheet.getCells(), column.getIndex(), totalCol);
      totalCol = totalCol + 1;
    }
    }
  else {
    // Obtener la colección de columnas de la hoja de trabajo
    ColumnCollection columns = sourceSheet.getCells().getColumns();

    // copiar columna a summaySheet
    for (Column column : (Iterable<Column>) columns)
    {
      summarySheet.getCells().copyColumn(sourceSheet.getCells(), column.getIndex(), totalCol);
      totalCol = totalCol + 1;
    }
  }
}

// Guarde el archivo de Excel.
workbook.save("C:\\Files\\CopyingColumns_out.xlsx");
Consolide columnas de varias hojas de trabajo en una usando Java

Consolide columnas de varias hojas de trabajo en una usando Java

El método de propiedad getColumns() de la clase Cells proporciona la colección de las columnas disponibles en la hoja de trabajo. La clase ColumnCollection representa la colección de columnas individuales en una hoja de trabajo, mientras que la clase Column representa una sola columna en una hoja de trabajo.

El método copyColumn() de la clase Cells copia los datos y formatos de una columna completa. La clase Cells también proporciona métodos copyColumn() sobrecargados para copiar datos con PasteOptions, número de columna, columnas totales de origen y destino, etc.

Obtenga una licencia gratis

Puede probar la API sin limitaciones de evaluación solicitando una licencia temporal gratuita.

Conclusión

En este artículo, ha aprendido a combinar varios archivos de Excel en un solo archivo. También aprendió cómo combinar hojas de trabajo específicas de varios archivos de Excel usando Java. Además, ha aprendido cómo fusionar varias hojas de trabajo en una sola hoja de trabajo mediante programación. Este artículo también explicó cómo consolidar columnas de varias hojas de trabajo en una sola usando Java. Puede obtener más información sobre Aspose.Cells para la API de Java utilizando la documentación. En caso de cualquier ambigüedad, no dude en contactarnos en el foro.

Ver también