Power Automate提取邮件中未知数量数据组的最优方案求询
解决Power Automate动态提取多组邮件数据的方案
方法1:正则表达式批量匹配(推荐,格式固定时最可靠)
利用邮件格式固定的特点,用正则一次性捕获所有数据组,摆脱固定索引限制:
- 保留原有流程第一步:将邮件正文转成文本(HTML-to-text)
- 添加「Compose」动作,输入以下表达式(根据实际邮件字段格式调整正则内容):
执行后会返回一个数组,每个元素对应一组数据,包含Name、Age、Location三个捕获值matches(outputs('HTML_to_text'), 'Name: (.*?)\s*Age: (.*?)\s*Location: (.*?)(?=\s*Name:|$)') - 添加「Apply to each」动作,遍历上述Compose的输出数组
- 在循环内,用以下表达式提取每组的值:
- Name:
items('Apply_to_each')[0] - Age:
items('Apply_to_each')[1] - Location:
items('Apply_to_each')[2]
- Name:
- 调用「Add a row into a table」动作,将提取的值写入Excel
注意:如果邮件字段标签(比如「Name:」)有大小写或空格差异,可调整正则为(?i)Name:忽略大小写。
方法2:按固定行数列分组处理
如果每组数据在文本数组里占固定行数(比如每组3行:Name、Age、Location各一行),通过动态索引遍历:
- HTML转文本后,将内容拆分成行数组:
split(outputs('HTML_to_text'), decodeUriComponent('%0A')) - 用「Filter array」动作过滤掉空行和无关行(比如邮件签名、标题等,只保留含目标字段的行)
- 初始化整数变量
currentGroupIndex,初始值为0 - 添加「Do until」循环,设置退出条件为
variables('currentGroupIndex') >= div(length(outputs('Filtered_array')), 3)(假设每组3行) - 在循环内,通过动态索引提取每组数据:
- Name:
outputs('Filtered_array')[variables('currentGroupIndex')*3] - Age:
outputs('Filtered_array')[variables('currentGroupIndex')*3+1] - Location:
outputs('Filtered_array')[variables('currentGroupIndex')*3+2]
- Name:
- 将数据写入Excel后,把
currentGroupIndex自增1
方法3:解析HTML结构(如果邮件HTML有固定容器)
若邮件HTML代码里,每组数据都包裹在固定标签容器内(比如<div class="data-group">),直接解析DOM:
- 无需转文本,直接获取邮件的HTML正文
- 添加「Compose」动作,用XPath提取所有数据组节点:
xpath(outputs('Get_email_body')?['body'], '//div[@class="data-group"]') - 遍历每个节点,用XPath提取字段值(根据实际HTML结构调整路径):
- Name:
xpath(items('Apply_to_each'), 'string(.//*[contains(text(),"Name:")]/following-sibling::text())') - 同理提取Age和Location
- Name:
- 将提取的值写入Excel
内容的提问来源于stack exchange,提问作者Melby
相关产品推荐
相关产品推荐

