教程:基于电子表格数据发送每周电子邮件提醒

本教程介绍如何在自动 Power Automate 工作流中从 Office 脚本 for Excel 返回信息。 将创建一个脚本,它可以查看时间表并与流一起发送提醒电子邮件。 此流程将按常规计划运行,代表你提供这些提醒。

提示

如果不熟悉 Office 脚本,建议从 教程:创建 Excel 表格并设置其格式开始。

如果你不熟悉 Power Automate,建议从 教程:从 Power Automate 流更新电子表格教程:自动保存工作簿中电子邮件中的内容开始。

Office 脚本使用 TypeScript,本教程面向在 JavaScript 或 TypeScript 方面具备初级到中级知识的人员。 如果你不熟悉 JavaScript,建议从 Mozilla JavaScript 教程入手。

先决条件

在本教程中,你需要访问 Office 脚本和 Power Automate。 如果未显示“自动”选项卡,请查看 平台支持Power Automate 注册常见问题解答包含有关 Power Automate 入门的信息。

准备工作簿

  1. 随时下载工作簿 - on-call-rotation.xlsx 到 OneDrive。

  2. 在 Excel 中打开 on-call-rotation.xlsx

  3. 在表中添加行,其中包含姓名、电子邮件地址以及与当前日期重叠的开始和结束日期。

    重要

    要编写的脚本使用表中第一个匹配的条目,因此请确保你的名称位于当前周的任何行的上方。

    包含呼叫旋转表格数据的工作表。

创建 Office 脚本

  1. 转到“ 自动 ”选项卡,然后选择“ 新建脚本”。

  2. 将脚本命名为“获取待命人员”。

  3. 现在应该有一个空脚本。 需要一个从电子表格获取电子邮件地址的脚本。 更改 main 以返回字符串,如下所示:

    function main(workbook: ExcelScript.Workbook) : string {
    }
    
  4. 接下来,需要从表获取所有数据。 这样,脚本就可以查看每一行。 在 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. 表中的日期使用 Excel 的日期序列号存储。 需要将这些日期转换为 JavaScript 日期才能进行比较。 在函数外部 main 添加以下帮助程序函数。

    // 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. 现在,你需要弄清楚现在哪个人正在待命。 他们的行将具有围绕当前日期的开始和结束日期。 该脚本将假定一次只有一个人在调用。 脚本可以返回数组来处理多个值,但你可以返回本教程的第一个匹配电子邮件地址。 将以下代码添加到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. 最后的脚本应该如下所示:

    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;
    }
    

使用 Power Automate 功能创建自动工作流

  1. 登录 Power Automate 网站

  2. 在屏幕左侧显示的菜单中,选择“创建”。 这将带你进入创建新工作流的方式列表。

     Power Automate 中的

  3. 在“从空白开始”部分下,选择“计划云流”。

     Power Automate 中的

  4. 接下来,设置此流的计划。 从 2024 年上半年的每个星期一开始,电子表格将有一个新的待命任务。 将流设置为在周一早上运行第一件事。 使用以下选项将流配置为每周星期一运行。

    • 流名称:通知待命人
    • 开始时间:23月11日11月27日上午1:00
    • 重复间隔:1 周
    • 这些日期:星期一

    Power Automate

  5. 选择“创建”。

  6. 在流生成器中 + ,选择按钮和 “添加操作”。

  7. “添加操作 ”任务窗格中,搜索“Excel 运行脚本”。 选择 Excel Online (Business) 连接器的 “运行脚本 ”操作。 此操作在工作簿上运行 OneDrive 中的脚本。 如果要使用存储在团队的 SharePoint 库中的脚本,则应使用 “从 SharePoint 库运行脚本” 操作。

    显示 Excel Online (Business) 连接器的操作选择任务窗格。突出显示了“运行脚本”操作。

  8. 系统可能会要求你登录 Microsoft 365 帐户。 请执行此操作以继续学习本教程。

  9. 接下来,选择要在流步骤中使用的工作簿和脚本。 对于本教程,你将使用在 OneDrive 中创建的工作簿,但可以在 OneDrive 或 SharePoint 网站中使用任何工作簿。 为 “运行脚本” 操作指定以下参数:

    • 位置:OneDrive for Business
    • 文档库:OneDrive
    • 文件: on-call-rotation.xlsx(通过文件浏览器选择)
    • 脚本:获取待命人员

    用于运行脚本的 Power Automate 连接器设置。

  10. 在流生成器中 + ,选择按钮和 “添加操作”。

  11. 通过发送提醒电子邮件结束流。 在 “添加操作 ”任务窗格中,搜索“发送电子邮件”。 选择Office 365 Outlook 连接器的“发送电子邮件 (V2) 操作。

    显示Office 365 Outlook 连接器的操作的操作选择任务窗格。突出显示了“发送电子邮件 (V2) ”操作。

    注意

    本教程使用 Outlook。 可改为使用你喜欢的电子邮件服务,但某些选项可能不同。

  12. 对于“ To ”参数,请选择文本框,然后选择“ 输入自定义值”。 使用动态内容控件添加脚本返回的电子邮件地址。 这将被标记为 结果,旁边有 Excel 图标。 可以提供你想要的任何主题和正文。

    用于发送电子邮件的 Power Automate Outlook 连接器设置。选项包括要发送的文件、电子邮件主题、电子邮件正文以及高级选项。

  13. 选择“保存”。

在 Power Automate 功能中测试脚本

你的流将在每周一早上运行。 现在可以通过选择屏幕右上角的“测试”按钮来测试脚本。 选择“手动”,然后选择“运行测试”来立即运行流并测试行为。 可能需要向 Excel 和 Outlook 授予权限才能继续。

提示

如果流无法发送电子邮件,请在电子表格中仔细检查是否在表格顶部列出了当前日期范围的有效电子邮件。

后续步骤

访问使用 Power Automate 运行 Office 脚本,以了解有关将 Office Script 与 Power Automate 连接的更多信息。

你还可以查看自动任务提醒示例场景,以了解如何将 Office 脚本和 Power Automate 与 Team Adaptive Cards 结合使用。