Compartir vía


Tutorial: Guardar automáticamente el contenido de los correos electrónicos en un libro

En este tutorial se explica cómo usar un script de Office para Excel con un flujo de trabajo automatizado de Power Automate . El script se ejecutará automáticamente cada vez que reciba un correo electrónico, grabando información del correo en un libro de Excel. Pasar datos de otras aplicaciones a un script de Office le ofrece una gran flexibilidad y libertad para sus procesos automatizados.

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 comenzar con Tutorial: Actualización de una hoja de cálculo desde un flujo de Power Automate. 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

Power Automate no debe usar referencias relativas como Workbook.getActiveWorksheet para acceder a componentes de libros de trabajo. Por lo tanto, necesita un libro y una hoja de cálculo con nombres coherentes para que Power Automate haga referencia.

  1. Cree un nuevo libro de trabajo y llámelo Mi libro de trabajo.

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

  3. Reemplace el código existente con el siguiente script y seleccione Ejecutar. Esto configurará el libro con nombres de tabla dinámica, hoja de cálculo y tabla coherentes.

    function main(workbook: ExcelScript.Workbook) {
      // Add a new worksheet to store the email table.
      let emailsSheet = workbook.addWorksheet("Emails");
    
      // Add data and create a table
      emailsSheet.getRange("A1:D1").setValues([
        ["Date", "Day of the week", "Email address", "Subject"]
      ]);
      let newTable = workbook.addTable(emailsSheet.getRange("A1:D2"), true);
      newTable.setName("EmailTable");
    
      // Add a new PivotTable to a new worksheet
      let pivotWorksheet = workbook.addWorksheet("Subjects");
      let newPivotTable = workbook.addPivotTable("Pivot", "EmailTable", pivotWorksheet.getRange("A3:C20"));
    
      // Setup the pivot hierarchies
      newPivotTable.addRowHierarchy(newPivotTable.getHierarchy("Day of the week"));
      newPivotTable.addRowHierarchy(newPivotTable.getHierarchy("Email address"));
      newPivotTable.addDataHierarchy(newPivotTable.getHierarchy("Subject"));
    }
    

Crear un script de Office

Cree un script que registre información de un correo electrónico. Querrá realizar un seguimiento de qué días de la semana recibe más correo y cuántos remitentes únicos están enviando ese correo. El libro tiene una tabla con las columnas Fecha, Día de la semana, Dirección Email y Asunto. La hoja de cálculo también tiene una tabla dinámica que pivota en el día de la semana y Email dirección (esas son las jerarquías de fila). El recuento de Asuntos únicos es la información agregada que se muestra (la jerarquía de datos). El script actualizará esa tabla dinámica después de actualizar la tabla de correo electrónico.

  1. Desde el panel de tareas del Editor de código, seleccione Nuevo script.

  2. El flujo que creará más adelante en el tutorial envía la información de script sobre cada correo electrónico que se recibe. El script necesita aceptar esa entrada mediante parámetros en la función main. Reemplace el script predeterminado con el siguiente script.

    function main(
      workbook: ExcelScript.Workbook,
      from: string,
      dateReceived: string,
      subject: string) {
    
    }
    
  3. El script necesita acceso a la tabla del libro de trabajo y a la tabla dinámica. Agregue el código siguiente al cuerpo del script, después de abrir {.

    // Get the email table.
    let emailWorksheet = workbook.getWorksheet("Emails");
    let table = emailWorksheet.getTable("EmailTable");
    
    // Get the PivotTable.
    let pivotTableWorksheet = workbook.getWorksheet("Subjects");
    let pivotTable = pivotTableWorksheet.getPivotTable("Pivot");
    
  4. El parámetro dateReceived es de tipo string. Conviértalo en un Date objeto para que puedas obtener fácilmente el día de la semana. Después de hacerlo, tendrá que asignar el valor de número del día a una versión más legible. Agregue el código siguiente al final del script, antes de cerrar }.

      // Parse the received date string to determine the day of the week.
      let emailDate = new Date(dateReceived);
      let dayName = emailDate.toLocaleDateString("en-US", { weekday: 'long' });
    
  5. La cadena subject puede incluir la etiqueta de respuesta "RE:". Quítelo de la cadena para que los correos electrónicos del mismo subproceso tengan el mismo asunto para la tabla. Agregue el código siguiente al final del script, antes de cerrar }.

    // Remove the reply tag from the email subject to group emails on the same thread.
    let subjectText = subject.replace("Re: ", "");
    subjectText = subjectText.replace("RE: ", "");
    
  6. Ahora que se ha dado formato a los datos de correo electrónico, agregue una fila a la tabla de correo electrónico. Agregue el código siguiente al final del script, antes de cerrar }.

    // Add the parsed text to the table.
    table.addRow(-1, [dateReceived, dayName, from, subjectText]);
    
  7. Por último, asegúrese de que se actualiza la tabla dinámica. Agregue el código siguiente al final del script, antes del cierre }:

    // Refresh the PivotTable to include the new row.
    pivotTable.refresh();
    
  8. Cambie el nombre del script Registrar correo electrónico y seleccione Guardar script.

El script ya está preparado para un flujo de trabajo de Power Automate. Debería tener un aspecto similar al siguiente script.

function main(
  workbook: ExcelScript.Workbook,
  from: string,
  dateReceived: string,
  subject: string) {
  // Get the email table.
  let emailWorksheet = workbook.getWorksheet("Emails");
  let table = emailWorksheet.getTable("EmailTable");

  // Get the PivotTable.
  let pivotTableWorksheet = workbook.getWorksheet("Subjects");
  let pivotTable = pivotTableWorksheet.getPivotTable("Pivot");

  // Parse the received date string to determine the day of the week.
  let emailDate = new Date(dateReceived);
  let dayName = emailDate.toLocaleDateString("en-US", { weekday: 'long' });

  // Remove the reply tag from the email subject to group emails on the same thread.
  let subjectText = subject.replace("Re: ", "");
  subjectText = subjectText.replace("RE: ", "");

  // Add the parsed text to the table.
  table.addRow(-1, [dateReceived, dayName, from, subjectText]);

  // Refresh the PivotTable to include the new row.
  pivotTable.refresh();
}

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 Inicio desde cero, seleccione Flujo automatizado. Esto creará un flujo de trabajo desencadenado por un evento, como la recepción de un correo electrónico.

    La opción de Flujo automatizado en Power Automate.

  4. En la ventana de diálogo que aparece, escriba un nombre para su flujo en el cuadro de texto Nombre de flujo. En Elegir el desencadenador del flujo, seleccione Cuando llegue un nuevo correo electrónico en la lista de opciones. Es posible que tenga que buscar la opción con el cuadro de búsqueda. Por último, seleccione Crear.

    Forma parte del flujo de Power Automate que muestra el «nombre del flujo» y las opciones de «elegir el desencadenador del flujo». El nombre del flujo es «Registrar flujo de correo electrónico» y el desencadenador es la opción «Cuando llega un correo electrónico nuevo a Outlook».

    Nota:

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

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

  6. 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.

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

  8. 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: MyWorkbook.xlsx (seleccionado por el explorador de archivos)
    • Script: Registrar correo electrónico
    • ScriptParameters/from: From (contenido dinámico de Outlook)
    • ScriptParameters/dateReceived: tiempo recibido (contenido dinámico de Outlook)
    • ScriptParameters/subject: Asunto (contenido dinámico de Outlook)

    Tenga en cuenta que los parámetros del script solo aparecen cuando se selecciona el script.

    La acción de ejecutar script de Power Automate muestra las opciones que aparecen una vez seleccionado el script.

  9. Seleccione Guardar.

    El botón Guardar de Power Automate.

El flujo está ahora habilitado. El script se ejecutará automáticamente cada vez que reciba un correo electrónico a través de Outlook.

Administrar el script en Power Automate

  1. En la página principal de Power Automate, seleccione Mis flujos.

    El botón Mis flujos en Power Automate.

  2. Seleccione el flujo. Aquí puede ver el historial de ejecución. Puede actualizar la página o seleccionar el botón actualizar Todas las ejecuciones para actualizar el historial. El flujo se desencadenará poco después de que se reciba un correo electrónico. Pruebe el flujo enviándose un correo electrónico a sí mismo.

Cuando se desencadene el flujo y se ejecute correctamente el script, debería ver que se actualizan la tabla dinámica y la tabla del libro.

Una hoja de cálculo que muestra la tabla de correo electrónico después de que el flujo se haya ejecutado tres veces.

Una hoja de cálculo que muestra la tabla dinámica después de que el flujo se haya ejecutado tres veces.

Solución de problemas

Recibir varios correos electrónicos al mismo tiempo puede causar conflictos de combinación en Excel. Este riesgo se mitiga configurando el conector de correo electrónico para que solo actúe en un correo electrónico a la vez. Para hacerlo:

  1. Seleccione la acción "llega el correo electrónico" y, a continuación, seleccione Configuración.

  2. En la Configuración en las opciones emergentes, establezca Control de simultaneidad en Activado. A continuación, establezca el grado de paralelismo en 1.

    Las opciones de simultaneidad en el menú de configuración.

Siguientes pasos

Tutorial completo: Enviar recordatorios de correo electrónico semanales basados en datos de hoja de cálculo. Muestra cómo devolver datos de un script al flujo.

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.