教程:自动保存工作簿中电子邮件中的内容
本教程介绍如何将 Office 脚本 for Excel 与自动化 Power Automate 工作流配合使用。 每当你收到电子邮件时,脚本都会自动运行,并将电子邮件中的信息记录在 Excel 工作簿中。 能够将其他应用程序中的数据传递到 Office 脚本中,可以为你在自动化过程中提供极大的灵活性和自由度。
提示
如果不熟悉 Office 脚本,建议从 教程:创建 Excel 表格并设置其格式开始。 如果你不熟悉 Power Automate,建议从 教程:从 Power Automate 流更新电子表格开始。 Office 脚本使用 TypeScript,本教程面向在 JavaScript 或 TypeScript 方面具备初级到中级知识的人员。 如果你不熟悉 JavaScript,建议从 Mozilla JavaScript 教程入手。
先决条件
在本教程中,你需要访问 Office 脚本和 Power Automate。 如果未显示“自动”选项卡,请查看 平台支持 。 Power Automate 注册常见问题解答包含有关 Power Automate 入门的信息。
准备工作簿
Power Automate 不应使用Workbook.getActiveWorksheet
之类的相对引用访问工作簿组件。 因此,你需要一个工作簿和工作表,其名称一致,供 Power Automate 引用。
创建名为 MyWorkbook 的新工作簿。
转到“ 自动 ”选项卡,然后选择“ 新建脚本”。
将现有代码替换为以下脚本,并选择“运行”。 这会将工作簿设置为一致的工作表、表和数据透视表名称。
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")); }
创建 Office 脚本
创建一个脚本,用于记录电子邮件中的信息。 你需要跟踪一周中的哪几天收到邮件最多,以及发送该邮件的唯一发件人数。 工作簿有一个表,其中包含日期、星期几、Email地址和主题列。 工作表还有一个数据透视表,该数据透视表位于星期几,Email地址 (这些地址是行层次结构) 。 唯一主题的计数是所显示的聚合信息(数据层次结构)。 脚本将在更新电子邮件表后刷新该数据透视表。
在代码编辑器任务窗格中,选择“新建脚本”。
稍后在本教程中创建的流会发送有关收到的每封电子邮件的脚本信息。 脚本需要通过
main
函数中的参数接受该输入。 将默认脚本替换为以下脚本。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");
dateReceived
参数的类型为string
。 将其转换为Date
对象 ,以便轻松获取星期几。 执行此操作后,需要将当天的数字值映射到更易读的版本。 在结束}
之前,将以下代码添加到脚本末尾。// 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' });
subject
字符串可能包含 "RE:" 回复标记。 从字符串中删除该字符串,以便同一线程中的电子邮件具有表的相同主题。 在结束}
之前,将以下代码添加到脚本末尾。// 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();
将脚本重命名为“录制电子邮件”,然后选择“保存脚本”。
现在,你的脚本已准备就绪,可运行 Power Automate 工作流。 它应类似于以下脚本。
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();
}
使用 Power Automate 功能创建自动工作流
在屏幕左侧显示的菜单中,选择“创建”。 这将带你进入创建新工作流的方式列表。
在从空白开始部分中,选择即时流。 这将创建由事件(例如接收电子邮件)触发的工作流。
在出现的对话框窗口中,在 "流名称" 文本框中输入流的名称。 在 “选择流的触发器”下,从选项列表中选择“ 当收到新电子邮件时 ”。 可能需要使用搜索框搜索选项。 最后,选择“创建”。
注意
本教程使用 Outlook。 可改为使用你喜欢的电子邮件服务,但某些选项可能不同。
在流生成器中 + ,选择按钮和 “添加操作”。
在 “添加操作 ”任务窗格中,搜索“Excel 运行脚本”。 选择 Excel Online (Business) 连接器的 “运行脚本 ”操作。 此操作在工作簿上运行 OneDrive 中的脚本。 如果要使用存储在团队的 SharePoint 库中的脚本,则应使用 “从 SharePoint 库运行脚本” 操作。
系统可能会要求你登录 Microsoft 365 帐户。 请执行此操作以继续学习本教程。
接下来,选择要在流步骤中使用的工作簿和脚本。 对于本教程,你将使用在 OneDrive 中创建的工作簿,但可以在 OneDrive 或 SharePoint 网站中使用任何工作簿。 为 “运行脚本” 操作指定以下参数:
- 位置:OneDrive for Business
- 文档库:OneDrive
- 文件: MyWorkbook.xlsx (通过文件浏览器选择)
- 脚本:记录电子邮件
- ScriptParameters/from:从 Outlook) (动态内容
- ScriptParameters/dateReceived: 从 Outlook) 接收时间 (动态内容
- ScriptParameters/subject:主题 (Outlook) 中的动态内容
请注意,仅当选择脚本后,才会显示脚本的参数。
选择“保存”。
现已启用你的流程。 每次通过 Outlook 收到电子邮件时,它都会自动运行脚本。
在 Power Automate 功能中管理脚本
在 Power Automate 主页面上,选择我的流。
选择你的流程。 可在此处查看 "运行历史记录"。 可刷新页面,或选择刷新“全部运行”按钮以更新历史记录。 收到电子邮件后,流将立即触发。 通过发送自己的邮件来测试流。
当流被触发并成功运行脚本时,应该可以看到工作簿的表和数据透视表更新。
疑难解答
同时接收多封电子邮件可能会导致 Excel 中的合并冲突。 通过将电子邮件连接器设置为一次只处理一封电子邮件来缓解此风险。 为此:
选择“电子邮件到达”操作,然后选择 “设置”。
在弹出的“设置”选项中,将“并发控制”设置为“打开”。 然后,将“并行度”设置为“1”。
后续步骤
完成 教程:基于电子表格数据每周发送电子邮件提醒。 它教你如何将数据从脚本返回到流。
你还可以查看自动任务提醒示例场景,以了解如何将 Office 脚本和 Power Automate 与 Team Adaptive Cards 结合使用。