Compartir a través de


Combinar hojas de cálculo en un solo libro

En este ejemplo se muestra cómo extraer datos de varios libros en un solo libro centralizado. Usa dos scripts: uno para recuperar información de un libro y otro para crear hojas de cálculo con esa información. Combina los scripts en un flujo de Power Automate que actúa en una carpeta completa de OneDrive.

Importante

En este ejemplo solo se copian los valores de los otros libros. No conserva el formato, los gráficos, las tablas u otros objetos.

Solución

  1. Cree un nuevo archivo de Excel en su OneDrive. En este ejemplo se usa el nombre de archivo "Combination.xlsx".
  2. Cree y guarde los dos scripts de este ejemplo.
  3. Cree una carpeta en OneDrive y agregue uno o varios libros con datos. El nombre de carpeta "output" se usa en este ejemplo.
  4. Compila un flujo (como se describe en la sección Flujo de Power Automate de este artículo) para realizar estos pasos:
    1. Enumere todos los archivos de la carpeta "output".
    2. Usar el script Devolver datos de hoja de cálculo para obtener los datos de cada hoja de cálculo en cada uno de los libros de trabajo.
    3. Use el script Añadir hojas de cálculo para crear una nueva hoja de cálculo en el libro de trabajo "Combinación.xlsx" para cada hoja de cálculo de los demás archivos.

Código de ejemplo: Aevolver datos de hoja de cálculo

/**
 * This script returns the values from the used ranges on each worksheet.
 */
function main(workbook: ExcelScript.Workbook): WorksheetData[] {
  // Create an object to return the data from each worksheet.
  let worksheetInformation: WorksheetData[] = [];

  // Get the data from every worksheet, one at a time.
  workbook.getWorksheets().forEach((sheet) => {
    let values = sheet.getUsedRange()?.getValues();
    worksheetInformation.push({
       name: sheet.getName(),
       data: values as string[][]
    });
  });

  return worksheetInformation;
}

// An interface to pass the worksheet name and cell values through a flow.
interface WorksheetData {
  name: string;
  data: string[][];
}

Código de ejemplo: Agregar hojas de cálculo

/**
 * This script creates a new worksheet in the current workbook for each WorksheetData object provided.
 */
function main(workbook: ExcelScript.Workbook, workbookName: string, worksheetInformation: WorksheetData[]) {
  // Add each new worksheet.
  worksheetInformation.forEach((value) => {
    let sheet = workbook.addWorksheet(`${workbookName}.${value.name}`);

    // If there was any data in the worksheet, add it to a new range.
    if (value.data) {
      let range = sheet.getRangeByIndexes(0, 0, value.data.length, value.data[0].length);
      range.setValues(value.data);
    }
  });
}

// An interface to pass the worksheet name and cell values through a flow.
interface WorksheetData {
  name: string;
  data: string[][];
}

Flujo de Power Automate: Combinar hojas de cálculo en un único libro de trabajo

  1. Inicie sesión en Power Automate y cree un nuevo Flujo instantáneo en la nube.

  2. Elija Desencadenar manualmente un flujo y seleccione Crear.

  3. Obtenga todos los libros que quiere combinar de su carpeta. Agregue una acción y seleccione la acción Enumerar archivos en carpeta del conector OneDrive para la Empresa. En el campo Carpeta, use el selector de archivos para seleccionar la carpeta "output".

    El conector OneDrive para la Empresa completado en Power Automate.

  4. Agregue una acción para ejecutar el script Devolver datos de hoja de cálculo para obtener todos los datos de cada uno de los libros. Seleccione la acción Ejecutar script del conector Excel Online (Empresa). Use los siguientes valores para la acción. Tenga en cuenta que cuando agregue el Id. para el archivo, Power Automate encapsulará la acción en un control Para cada, por lo que la acción se realizará en cada archivo.

    • Ubicación: OneDrive para la Empresa
    • Biblioteca de documentos: OneDrive
    • Archivo: Id. (contenido dinámico de Enumerar archivos en carpeta)
    • Script: Devolver datos de hoja de cálculo

    La acción Ejecutar script completada en el panel de tareas de acción.

  5. Agregue una acción para ejecutar el script Agregar hojas de cálculo en el nuevo archivo de Excel que ha creado. Esto agregará los datos de todos los demás libros. Después de la acción Ejecutar script anterior y dentro del control Para cada, agregue una acción que use la acción Ejecutar script del conector Excel Online ( Empresa). Use los siguientes valores para la acción.

    • Ubicación: OneDrive para la Empresa
    • Biblioteca de documentos: OneDrive
    • Archivo: "Combination.xlsx" (archivo seleccionado por el selector de archivos)
    • Script: Agregar hojas de cálculo
    • workbookName: Nombre (contenido dinámico de Enumerar archivos en carpeta)
    • worksheetInformation ( consulte la nota que sigue a la siguiente imagen): resultado (contenido dinámico de Ejecutar script)

    La segunda acción Ejecutar script dentro del control Aplicar a cada.

    Nota:

    Seleccione el botón Cambiar a entrada de matriz completa para agregar el objeto de matriz directamente, en lugar de elementos individuales para la matriz. Hágalo antes de escribir el resultado.

    El botón para cambiar a la entrada de una matriz entera en un cuadro de entrada de campo de control.

  6. Guarde el flujo. El diseñador de flujos debe tener un aspecto similar al de la imagen siguiente.

    El diseñador de flujos mostrando las dos acciones Ejecutar script dentro de un bucle de control Para cada.

  7. Use el botón Probar de la página del editor de flujos o ejecute el flujo a través de su pestaña Mis flujos. Asegúrese de permitir el acceso al flujo cuando se le solicite.

  8. El archivo "Combination.xlsx" debería tener ahora nuevas hojas de cálculo.

Solución de problemas

  • Ya existe un recurso con el mismo nombre o identificador: este error probablemente indica que el libro de trabajo "Combination.xlsx" ya tiene una hoja de cálculo con el mismo nombre. Esto ocurrirá si ejecuta el flujo varias veces con los mismos libros. Cree un libro cada vez para almacenar los datos combinados o use nombres de archivo diferentes en la carpeta "output".

  • El argumento no es válido, falta o tiene un formato incorrecto: este error puede significar que el nombre de la hoja de cálculo generada no cumple los requisitos de Excel. Es probable que esto se deba a que el nombre es demasiado largo. Si los nombres de las hojas de cálculo van a tener más de 30 caracteres, reemplace el código en "Añadir hojas de cálculo" que agrega addWorksheet por algo que acorte la cadena. Dado que el propio nombre del libro puede ser demasiado largo, agregue un número de incremento al final del nombre de la hoja de cálculo. Declare este número fuera del bucle forEach.

    let worksheetNumber = 1;
    // Add each new worksheet.
    worksheetInformation.forEach((value) => {
        let worksheetName = `${workbookName}.${value.name}`;
        let sheet = workbook.addWorksheet(`${worksheetName.substr(0,30)}${worksheetNumber++}`);
    

    Además, si los nombres de los libros tienen más de 30 caracteres, deberá acortarlos en el flujo. En primer lugar, debe crear una variable en el flujo para realizar un seguimiento del recuento de libros. Esto evitará que se pasen nombres abreviados idénticos al script. Agregar una acción Inicializar variable antes del flujo (de Tipo "Entero") y una acción Incrementar variable entre las dos acciones Ejecutar script. Después, en lugar de usar Nombre como workbookName en "Ejecutar script 1", use la expresión substring(items('Apply_to_each')?['Name'],0,min(length(items('Apply_to_each')?['Name']),20)) y el contenido dinámico de su variable. Esto acorta los nombres de libro a 20 caracteres y anexa el número de libro actual a la cadena que se pasa al script.

    La segunda acción Ejecutar script con los cambios en el parámetro del nombre del libro.

    Los pasos Inicializar variable e Incrementar variable agregados al flujo.

    Nota:

    En lugar de complicar más el flujo y el script, sería más fácil asegurarse de que los nombres de los archivos y las hojas de cálculo son lo suficientemente cortos.