Share via


Tutorial: Envío de recordatorios semanales de correo electrónico basados en datos de hoja de cálculo

En este tutorial se explica cómo devolver información de un script de Office para Excel como parte de un flujo de trabajo automatizado de Power Automate . Creará un script que busca en una programación y funciona con un flujo para enviar correos electrónicos de recordatorio. Este flujo se ejecutará de forma periódica y proporcionará los recordatorios en su nombre.

Sugerencia

Si no está familiarizado con los scripts de Office, se recomienda empezar por Tutorial: Creación y formato de una tabla de Excel.

Si no está familiarizado con Power Automate, se recomienda empezar por Tutorial: Actualización de una hoja de cálculo desde un flujo de Power Automate y Tutorial: Guardar automáticamente el contenido de los correos electrónicos de un libro.

Scripts de Office usa TypeScript y este tutorial está diseñado para las personas con conocimientos de nivel intermedio de JavaScript o TypeScript. Si no está familiarizado con JavaScript, le recomendamos que comience con el Tutorial de JavaScript de Mozilla.

Requisitos previos

Necesitará acceso a Scripts de Office y Power Automate para este tutorial. Revise el soporte técnico de la plataforma si no aparece la pestaña Automatizar. Las preguntas más frecuentes sobre el registro de Power Automate tienen información sobre cómo empezar a trabajar con Power Automate.

Preparar el libro

  1. Descargue el libro on-call-rotation.xlsx en su OneDrive.

  2. Abra on-call-rotation.xlsx en Excel.

  3. Agregue una fila a la tabla con su nombre, dirección de correo electrónico y fechas de inicio y finalización que se solapen con la fecha actual.

    Importante

    El script que escribirá usa la primera entrada coincidente de la tabla, así que asegúrese de que su nombre se encuentre encima de cualquier fila con la semana actual.

    Una hoja de cálculo que contiene los datos de la tabla de rotación de guardia.

Crear un script de Office

  1. Vaya a la pestaña Automatizar y seleccione Nuevo script.

  2. Asigne al script el nombre Obtener persona de guardia.

  3. Ahora debería tener un script vacío. Quiere un script que obtenga una dirección de correo electrónico de la hoja de cálculo. Cambie main para devolver una cadena, de la siguiente manera:

    function main(workbook: ExcelScript.Workbook) : string {
    }
    
  4. A continuación, debe obtener todos los datos de la tabla. Esto permite que el script examine cada fila. Agregue el código siguiente dentro de la función main.

    // Get the H1 worksheet.
    let worksheet = workbook.getWorksheet("H1");
    
    // Get the first (and only) table in the worksheet.
    let table = worksheet.getTables()[0];
    
    // Get the data from the table.
    let tableValues = table.getRangeBetweenHeaderAndTotal().getValues();
    
  5. Las fechas de la tabla se almacenan con el número de serie de la fecha de Excel. Debe convertir esas fechas en fechas de JavaScript para poder compararlas. Agregue la siguiente función auxiliar fuera de la main función.

    // Convert the Excel date to a JavaScript Date object.
    function convertDate(excelDateValue: number) {
        let javaScriptDate = new Date(Math.round((excelDateValue - 25569) * 86400 * 1000));
        return javaScriptDate;
    }
    
  6. Ahora, tienes que averiguar qué persona está de guardia en este momento. La fila tendrá una fecha de inicio y una de finalización en torno a la fecha actual. El script supone que solo una persona está en llamada a la vez. Los scripts pueden devolver matrices para controlar varios valores, pero puede devolver la primera dirección de correo electrónico coincidente para este tutorial. Agregue el siguiente código al final de la función main.

    // Look for the first row where today's date is between the row's start and end dates.
    let currentDate = new Date();
    for (let row = 0; row < tableValues.length; row++) {
        let startDate = convertDate(tableValues[row][2] as number);
        let endDate = convertDate(tableValues[row][3] as number);
        if (startDate <= currentDate && endDate >= currentDate) {
            // Return the first matching email address.
            return tableValues[row][1].toString();
        }
    }
    
  7. El script final debería tener un aspecto similar al siguiente:

    function main(workbook: ExcelScript.Workbook) : string {
        // Get the H1 worksheet.
        let worksheet = workbook.getWorksheet("H1");
    
        // Get the first (and only) table in the worksheet.
        let table = worksheet.getTables()[0];
    
        // Get the data from the table.
        let tableValues = table.getRangeBetweenHeaderAndTotal().getValues();
    
        // Look for the first row where today's date is between the row's start and end dates.
        let currentDate = new Date();
        for (let row = 0; row < tableValues.length; row++) {
            let startDate = convertDate(tableValues[row][2] as number);
            let endDate = convertDate(tableValues[row][3] as number);
            if (startDate <= currentDate && endDate >= currentDate) {
                // Return the first matching email address.
                return tableValues[row][1].toString();
            }
        }
    }
    
    // Convert the Excel date to a JavaScript Date object.
    function convertDate(excelDateValue: number) {
        let javaScriptDate = new Date(Math.round((excelDateValue - 25569) * 86400 * 1000));
        return javaScriptDate;
    }
    

Crear un flujo de trabajo automatizado con Power Automate

  1. Inicie sesión en el sitio de Power Automate.

  2. En el menú que se muestra en la parte izquierda de la pantalla, seleccione Crear. Se mostrará una lista de maneras de crear flujos de trabajo nuevos.

    El botón Crear en Power Automate.

  3. En la sección Empezar desde cero, seleccione Flujo de nube programado.

    El botón de Flujo de nube programado en Power Automate.

  4. A continuación, establezca la programación de este flujo. La hoja de cálculo tiene una nueva asignación de llamada a partir de los lunes de la primera mitad de 2024. Establezca el flujo para que se ejecute a primera hora los lunes por la mañana. Use las opciones siguientes para configurar el flujo de ejecución el lunes de cada semana.

    • Nombre de flujo: notificar a la persona de guardia
    • A partir de: 27/11/23 a la 1:00 a.m.
    • Repetir cada: 1 semana
    • En estos días: L

    El cuadro de diálogo 'Crear un flujo de nube programado' de Power Automate donde se muestran opciones. Las opciones incluyen el nombre del flujo, la hora de inicio, la frecuencia de repetición y un día de la semana para ejecutar el flujo.

  5. Seleccione Crear.

  6. En el generador de flujos, seleccione el + botón y Agregar una acción.

  7. En el panel de tareas Agregar una acción , busque "Script de ejecución de Excel". Elija la acción Ejecutar script del conector de Excel Online (Empresa). Esta acción ejecuta un script desde OneDrive en un libro. Si desea usar un script almacenado en la biblioteca de SharePoint del equipo, debe usar la acción Ejecutar script desde una biblioteca de SharePoint .

    Panel de tareas de selección de acciones que muestra las acciones para el conector de Excel Online (Empresa). La acción Ejecutar script está resaltada.

  8. Es posible que se le pida que inicie sesión en su cuenta de Microsoft 365. Hágalo para continuar con el tutorial.

  9. A continuación, seleccione el libro y el script que va a usar en el paso de flujo. En el tutorial, usará el libro que creó en OneDrive, pero puede usar cualquier libro en un sitio de OneDrive o SharePoint. Especifique los parámetros siguientes para la acción Ejecutar script :

    • Ubicación: OneDrive para la Empresa
    • Biblioteca de documentos: OneDrive
    • Archivo: on-call-rotation.xlsx (seleccionado en el explorador de archivos)
    • Script: obtener persona de guardia

    La configuración del conector de Power Automate para ejecutar un script.

  10. En el generador de flujos, seleccione el + botón y Agregar una acción.

  11. Para finalizar el flujo, envíe el correo electrónico del recordatorio. En el panel de tareas Agregar una acción , busque "enviar un correo electrónico". Elija la acción Enviar un correo electrónico (V2) del conector de Outlook de Office 365.

    Panel de tareas de selección de acciones que muestra las acciones para el conector de Outlook de Office 365. La acción Enviar un correo electrónico (V2) está resaltada.

    Nota:

    Este tutorial usa Outlook. Puede usar el servicio de correo electrónico que prefiera, aunque algunas opciones pueden ser diferentes.

  12. En el parámetro To , seleccione el cuadro de texto y seleccione Escribir valor personalizado. Use el control de contenido dinámico para agregar la dirección de correo electrónico devuelta por el script. Se etiquetará como resultado con el icono de Excel situado al lado. Puede proporcionar el asunto y el texto de cuerpo que prefiera.

    La configuración del conector de Power Automate de Outlook para enviar un correo electrónico. Las opciones incluyen el archivo a enviar, el asunto del correo electrónico y el cuerpo del correo electrónico, así como opciones avanzadas.

  13. Seleccione Guardar.

Probar el script en Power Automate

El flujo se ejecutará cada lunes por la mañana. Para probar el script ahora, seleccione el botón Probar en la esquina superior derecha de la pantalla. Seleccione Manualmente y después seleccione Ejecutar prueba para ejecutar el flujo ahora y probar el comportamiento. Es posible que deba conceder permisos a Excel y Outlook para continuar.

El botón Probar de Power Automate

Sugerencia

Si el flujo no puede enviar un correo electrónico, vuelva a comprobar en la hoja de cálculo que se muestra un correo electrónico válido para el intervalo de fechas actual en la parte superior de la tabla.

Pasos siguientes

Visite Ejecutar scripts de Office con Power Automate para más información sobre la conexión de Scripts de Office con Power Automate.

También puede consultar el Escenario de muestra de recordatorios de tareas automatizados para aprender a combinar los Scripts de Office y Power Automate con las Tarjetas adaptables de Teams.