Share via


Escenario de ejemplo de Scripts de Office: Recordatorios de tareas automatizados

En este escenario, va a administrar un proyecto. Use una hoja de cálculo de Excel para realizar un seguimiento del estado de los empleados cada mes. A menudo es necesario recordar a los usuarios que rellenen su estado, por lo que ha decidido automatizar ese proceso de recordatorio.

Creará un flujo de Power Automate para enviar mensajes a personas con campos de estado que faltan y aplicará sus respuestas a la hoja de cálculo. Para ello, desarrollará un par de scripts para controlar el trabajo con el libro. El primer script obtiene una lista de personas con estados en blanco y el segundo script agrega una cadena de estado a la fila derecha. También usará las tarjetas adaptables de Teams para que los empleados escriban su estado directamente desde la notificación.

Aptitudes de scripting cubiertas

  • Creación de flujos en Power Automate
  • Pasar datos a scripts
  • Devolver datos de scripts
  • Tarjetas adaptables de Teams
  • Tables

Requisitos previos

En este escenario se usan Power Automate y Microsoft Teams.

Instrucciones de instalación

Descarga del libro

  1. Descargue el libro de ejemplo en OneDrive.

  2. Abra el libro en Excel.

Creación de los scripts

  1. En primer lugar, necesitamos un script para obtener todos los empleados con informes de estado que faltan en la hoja de cálculo. En la pestaña Automatizar , seleccione Nuevo script y pegue el siguiente script en el editor.

    /**
     * This script looks for missing status reports in a project management table.
     *
     * @returns An array of Employee objects (containing their names and emails).
     */
    function main(workbook: ExcelScript.Workbook): Employee[] {
      // Get the first worksheet and the first table on that worksheet.
      let sheet = workbook.getFirstWorksheet()
      let table = sheet.getTables()[0];
    
      // Give the column indices names matching their expected content.
      const NAME_INDEX = 0;
      const EMAIL_INDEX = 1;
      const STATUS_REPORT_INDEX = 2;
    
      // Get the data for the whole table.
      let bodyRangeValues = table.getRangeBetweenHeaderAndTotal().getValues();
    
      // Create the array of Employee objects to return.
      let people: Employee[] = [];
    
      // Loop through the table and check each row for completion.
      for (let i = 0; i < bodyRangeValues.length; i++) {
        let row = bodyRangeValues[i];
        if (row[STATUS_REPORT_INDEX] === "") {
          // Save the email to return.
          people.push({ name: row[NAME_INDEX].toString(), email: row[EMAIL_INDEX].toString() });
        }
      }
    
      // Log the array to verify we're getting the right rows.
      console.log(people);
    
      // Return the array of Employees.
      return people;
    }
    
    /**
     * An interface representing an employee.
     * An array of Employees will be returned from the script
     * for the Power Automate flow.
     */
    interface Employee {
      name: string;
      email: string;
    }
    
  2. Guarde el script con el nombre Obtener Personas.

  3. A continuación, necesitamos un segundo script para procesar las tarjetas de informe de estado y colocar la nueva información en la hoja de cálculo. En el panel de tareas Editor de código, seleccione Nuevo script y pegue el siguiente script en el editor.

    /**
     * This script applies the results of a Teams Adaptive Card about
     * a status update to a project management table.
     *
     * @param senderEmail - The email address of the employee updating their status.
     * @param statusReportResponse - The employee's status report.
     */
    function main(workbook: ExcelScript.Workbook,
      senderEmail: string,
      statusReportResponse: string) {
    
      // Get the first worksheet and the first table in that worksheet.
      let sheet = workbook.getFirstWorksheet();
      let table = sheet.getTables()[0];
    
      // Give the column indices names matching their expected content.
      const NAME_INDEX = 0;
      const EMAIL_INDEX = 1;
      const STATUS_REPORT_INDEX = 2;
    
      // Get the range and data for the whole table.
      let bodyRange = table.getRangeBetweenHeaderAndTotal();
      let tableRowCount = bodyRange.getRowCount();
      let bodyRangeValues = bodyRange.getValues();
    
      // Create a flag to denote success.
      let statusAdded = false;
    
      // Loop through the table and check each row for a matching email address.
      for (let i = 0; i < tableRowCount && !statusAdded; i++) {
        let row = bodyRangeValues[i];
    
        // Check if the row's email address matches.
        if (row[EMAIL_INDEX] === senderEmail) {
          // Add the Teams Adaptive Card response to the table.
          bodyRange.getCell(i, STATUS_REPORT_INDEX).setValues([
            [statusReportResponse]
          ]);
          statusAdded = true;
        }
      }
    
      // If successful, log the status update.
      if (statusAdded) {
        console.log(
          `Successfully added status report for ${senderEmail} containing: ${statusReportResponse}`
        );
      }
    }
    
  4. Guarde el script con el nombre Guardar estado.

Creación del flujo de Power Automate

  1. Abra la pestaña Creación de Power Automate.

    Sugerencia

    Si no ha creado un flujo antes, consulte nuestro tutorial Empezar a usar scripts con Power Automate para aprender los conceptos básicos.

  2. Cree un flujo de nube instantáneo.

  3. Elija Desencadenar manualmente un flujo en las opciones y seleccione Crear.

  4. El flujo debe llamar al script Get Personas para obtener todos los empleados con campos de estado vacíos. En el generador de flujos, seleccione el + botón y Agregar una acción. Seleccione la acción Ejecutar script del conector de Excel Online (Empresa). Proporcione las siguientes entradas para el paso de flujo:

    • Ubicación: OneDrive para la Empresa
    • Biblioteca de documentos: OneDrive
    • Archivo: task-reminders.xlsx (elegido mediante el explorador de archivos)
    • Script: obtener Personas

    La acción Ejecutar script completada.

  5. A continuación, el flujo debe procesar cada empleado de la matriz devuelta por el script. Agregue la tarjeta adaptable Post del conector de Microsoft Teamsy espere una acción de respuesta.

  6. El envío de una tarjeta adaptable requiere que el JSON de la tarjeta se proporcione como mensaje. Puede usar la tarjeta adaptable Designer para crear tarjetas personalizadas. Para este ejemplo, use el siguiente CÓDIGO JSON.

    {
      "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
      "type": "AdaptiveCard",
      "version": "1.0",
      "body": [
        {
          "type": "TextBlock",
          "size": "Medium",
          "weight": "Bolder",
          "text": "Update your Status Report"
        },
        {
          "type": "Image",
          "altText": "",
          "url": "https://i.imgur.com/f5RcuF3.png"
        },
        {
          "type": "TextBlock",
          "text": "This is a reminder to update your status report for this month's review. You can do so right here in this card, or by adding it directly to the spreadsheet.",
          "wrap": true
        },
        {
          "type": "Input.Text",
          "placeholder": "My status report for this month is...",
          "id": "response",
          "isMultiline": true
        }
      ],
      "actions": [
        {
          "type": "Action.Submit",
          "title": "Submit",
          "id": "submit"
        }
      ]
    }
    
  7. En el campo Destinatario , agregue correo electrónico desde el contenido dinámico (la selección tendrá el logotipo de Excel). La adición de correo electrónico hace que el paso de flujo esté rodeado por un bloque Para cada bloque. Esto significa que Power Automate iterará la matriz.

  8. Rellene los campos restantes de la siguiente manera:

    • Publicar como: Bot de Flow
    • Publicación en: Chat con el bot de Flow
    • Mensaje de actualización: gracias por enviar el informe de estado. La respuesta se ha agregado correctamente a la hoja de cálculo.

    Flujo de Power Automate que muestra la acción de tarjeta adaptable completada.

  9. En el bloque For each (Para cada uno), después de la tarjeta adaptable Post y esperar una acción de respuesta, agregue una nueva acción. Seleccione la acción Ejecutar script del conector de Excel Online (Empresa). Proporcione las siguientes entradas para el paso de flujo:

    • Ubicación: OneDrive para la Empresa
    • Biblioteca de documentos: OneDrive
    • Archivo: task-reminders.xlsx (elegido mediante el explorador de archivos)
    • Script: Guardar estado
    • senderEmail: correo electrónico (contenido dinámico de Excel)
    • statusReportResponse: respuesta (contenido dinámico de Teams)

    Flujo de Power Automate que muestra el paso aplicar a cada paso.

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

    Diagrama del flujo completado que muestra dos pasos que conducen a un control For each y dos pasos dentro del control For each.

Ejecución del flujo

Para probar el flujo, asegúrese de que las filas de tabla con estado en blanco usen una dirección de correo electrónico asociada a una cuenta de Teams (probablemente debería usar su propia dirección de correo electrónico durante las pruebas). Use el botón Probar de la página del editor de flujo o ejecute el flujo a través de la pestaña Mis flujos . Asegúrese de permitir el acceso cuando se le solicite.

Debería recibir una tarjeta adaptable de Power Automate a través de Teams. Una vez rellenado el campo de estado en la tarjeta, el flujo continuará y actualizará la hoja de cálculo con el estado que proporcione.

Antes de ejecutar el flujo

Hoja de cálculo con un informe de estado que contiene una entrada de estado que falta.

Recepción de la tarjeta adaptable

Una tarjeta adaptable en Teams que pide al empleado una actualización de estado.

Después de ejecutar el flujo

Hoja de cálculo con un informe de estado con una entrada de estado ahora rellenada.