Sharepoint power automate 自动化判断在线文件并发邮件
https://www.doubao.com/thread/a976ed7e91a0c
以下是使用 免费基础云流(Power Automate 免费版) 判断 SharePoint 上 Excel 文件数据、按条件发送邮件的 详细步骤,包含核心配置、表达式和优化建议:
一、准备工作
1. 确保权限
-
Excel 文件存储在 SharePoint 文档库 中(免费版支持此连接器),且已登录账号有权限读取文件和发送邮件(Outlook 连接器)。
-
表格结构示例(假设列名):
| 日期 | 状态 | 小组 | 其他字段 |
|------------|------| 小组A | ... |
| 2025-04-16 | | 小组B | ... |
2. 明确条件 -
筛选行: 日期 ≤ 今天 且 状态 = 空白
-
按“小组”字段值发送给对应邮箱(如:小组A→a@example.com,小组B→b@example.com)
二、创建云流步骤
- 触发器:定时运行(每天一次)
- 操作:添加 “计划 - 定时触发”
- 配置:
- 频率:Day(天)
- 间隔:1
- 时间:指定每日运行时间(如 09:00:00,时区为 UTC+8,需根据上海时区调整)
- 获取 Excel 数据
-
操作:使用 “SharePoint - 列出文件” 或 “Excel Online (Business) - 列出行”(推荐后者,需文件存储在 SharePoint 且为 Excel 在线格式)
-
若用“列出行”:
-
站点地址:填写 SharePoint 站点 URL(如 https://contoso.sharepoint.com )
-
文档库:选择 Excel 文件所在的库(如“报表”)
-
文件:选择具体 Excel 文件(如 任务表.xlsx )
-
表名:选择表格名称(如“Sheet1”)
-
优化:直接添加 筛选条件 减少后续处理量(可选,免费版支持简单筛选):
-
筛选行: 状态 eq '' (状态为空, eq 表示等于,空字符串用 '' )
- 过滤符合条件的行(日期 ≤ 今天)
-
操作:添加 “条件” 动作,对步骤 2 输出的每一行数据进行判断
-
输入:
-
条件左侧: item()?['日期'] (Excel 中的日期字段,需与列名一致,如“日期”)
-
条件逻辑: 小于等于
-
条件右侧: utcNow() (当前 UTC 时间,若 Excel 日期为本地时间,需转换为 UTC,见下方表达式)
-
日期转换(关键!)
若 Excel 日期为 上海时区(UTC+8),需将 utcNow() 转换为本地时间再比较:
addHours(utcNow(), 8) // 将 UTC 时间转为上海时间
最终条件表达式:
lessOrEquals(item()?['日期'], addHours(utcNow(), 8))
- 循环处理符合条件的行
- 操作:对步骤 3 中通过条件的行,使用 “应用到每一个” 循环
- 输入:选择步骤 3 条件的“是”分支输出(即符合 日期≤今天 且 状态空白 的行)
- 按“小组”发送不同邮件
在循环内添加 “条件” 或 “选择” 动作(推荐后者,更高效):
方法一:直接条件判断(小组较少时)
- 操作:添加 “条件”
- 条件 1: item()?['小组'] eq '小组A'
- 是:发送邮件给 a@example.com
- 条件 2: item()?['小组'] eq '小组B'
- 是:发送邮件给 b@example.com
- 默认(可选):处理未匹配的小组(如记录日志)
方法二:使用“选择”映射小组到邮箱(小组较多时)
-
操作:添加 “选择” 动作,定义映射关系:
-
输入: item()?['小组'] (当前行的小组值)
-
映射:
[
{ "value": "小组A", "email": "a@example.com" },
{ "value": "小组B", "email": "b@example.com" }
] -
后续:通过 body('选择')?['email'] 获取对应邮箱,避免多个条件分支
-
发送邮件操作(Outlook 或 Outlook.com):
-
收件人:填入邮箱变量(如上述 email )
-
主题:可包含小组名称,如 =concat("小组任务提醒:", item()?['小组'])
-
正文:包含行内其他信息,如 =concat("日期:", item()?['日期'], ",状态:", item()?['状态'])
三、关键表达式详解
1. 日期比较(上海时区,UTC+8)
lessOrEquals(item()?['日期'], addHours(utcNow(), 8))
- item()?['日期'] :Excel 中的日期字段(需为日期格式,非字符串)。
- addHours(utcNow(), 8) :将 UTC 时间转为上海时间(当前日期)。
2. 状态为空判断
在步骤 2 筛选或步骤 3 条件中使用:
empty(item()?['状态']) // 直接判断字段是否为空(优于 eq '',兼容空值和空字符串)
四、免费版配额优化建议
1. 减少操作数
-
在 步骤 2“列出行”中添加筛选(状态为空),提前过滤掉无效行,减少循环次数:
筛选行: 状态 eq '' -
避免使用“获取所有行”后再过滤,直接通过筛选条件减少数据量。
2. 控制循环数据量 -
若 Excel 数据量大,添加 “限制行数”(如 100 行),免费版支持此配置,避免单次运行消耗过多操作数。
3. 合并邮件(可选) -
若同一小组多行数据,可在循环内用 “追加到字符串变量” 合并信息,最后发送一封汇总邮件(减少邮件发送次数和操作数)。
五、完整流程示意图
定时触发(每天9点)
→ 获取Excel行(筛选状态为空)
→ 过滤日期≤今天的行
→ 循环每行
→ 根据小组选择邮箱
→ 发送邮件
六、常见问题排查
1. 日期格式错误
-
确保 Excel 日期列是 日期格式,非文本;在 Power Automate 中用 formatDateTime(item()?['日期'], 'yyyy-MM-dd') 转换为字符串后再比较。
2. 状态字段不匹配 -
若状态列有空格(如“ ”),需用 trim(item()?['状态']) eq '' 去除空格后判断。
3. 权限问题 -
确保 SharePoint 连接器有权限读取文件,Outlook 连接器有权限发送邮件(免费版支持个人/工作邮箱)。
通过以上步骤,免费基础云流可稳定实现 每日定时筛选 SharePoint Excel 数据、按小组发送邮件 的需求,且操作数远低于每月 6,000 次的配额限制。

浙公网安备 33010602011771号