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)

二、创建云流步骤

  1. 触发器:定时运行(每天一次)
  • 操作:添加 “计划 - 定时触发”
  • 配置:
  • 频率:Day(天)
  • 间隔:1
  • 时间:指定每日运行时间(如 09:00:00,时区为 UTC+8,需根据上海时区调整)
  1. 获取 Excel 数据
  • 操作:使用 “SharePoint - 列出文件” 或 “Excel Online (Business) - 列出行”(推荐后者,需文件存储在 SharePoint 且为 Excel 在线格式)

  • 若用“列出行”:

  • 站点地址:填写 SharePoint 站点 URL(如  https://contoso.sharepoint.com )

  • 文档库:选择 Excel 文件所在的库(如“报表”)

  • 文件:选择具体 Excel 文件(如  任务表.xlsx )

  • 表名:选择表格名称(如“Sheet1”)

  • 优化:直接添加 筛选条件 减少后续处理量(可选,免费版支持简单筛选):

  • 筛选行: 状态 eq '' (状态为空, eq  表示等于,空字符串用  '' )

  1. 过滤符合条件的行(日期 ≤ 今天)
  • 操作:添加 “条件” 动作,对步骤 2 输出的每一行数据进行判断

  • 输入:

  • 条件左侧: item()?['日期'] (Excel 中的日期字段,需与列名一致,如“日期”)

  • 条件逻辑: 小于等于

  • 条件右侧: utcNow() (当前 UTC 时间,若 Excel 日期为本地时间,需转换为 UTC,见下方表达式)

  • 日期转换(关键!)
    若 Excel 日期为 上海时区(UTC+8),需将  utcNow()  转换为本地时间再比较:

addHours(utcNow(), 8) // 将 UTC 时间转为上海时间

最终条件表达式:

lessOrEquals(item()?['日期'], addHours(utcNow(), 8))

  1. 循环处理符合条件的行
  • 操作:对步骤 3 中通过条件的行,使用 “应用到每一个” 循环
  • 输入:选择步骤 3 条件的“是”分支输出(即符合  日期≤今天 且 状态空白  的行)
  1. 按“小组”发送不同邮件

在循环内添加 “条件” 或 “选择” 动作(推荐后者,更高效):

方法一:直接条件判断(小组较少时)

  • 操作:添加 “条件”
  • 条件 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 次的配额限制。

https://www.doubao.com/thread/a976ed7e91a0c

posted @ 2025-04-16 08:29  qczhuqc  阅读(185)  评论(0)    收藏  举报