如何解决Power Automate中Outlook附件xls文件损坏问题?
解决Power Automate中OneDrive XLS文件作为邮件附件损坏的问题
问题核心原因
你当前的流程错误在于直接将OneDrive「获取文件内容」返回的Base64字符串追加到数组,且附件对象格式不符合Outlook发送邮件的要求,导致文件解析时损坏。
正确流程实现步骤
初始化数组变量
创建一个类型为Array的变量(例如命名为AttachmentsArray),用于存储所有待发送的附件对象。批量获取目标文件夹文件
使用OneDrive的「List files in folder」操作,指定目标文件夹路径,一次性获取所有需要发送的XLS文件,避免手动重复添加「获取文件内容」步骤。遍历文件并构造附件对象
添加「Apply to each」循环,遍历「List files in folder」返回的value集合:- 在循环内调用OneDrive的「Get file content」操作,选择当前循环项的
Identifier作为文件标识。 - 执行「Append to array variable」操作,向
AttachmentsArray中追加如下格式的对象(注意键名大小写敏感):
其中:{ "Name": "@items('Apply_to_each')?['Name']", "ContentBytes": "@base64ToBinary(body('Get_file_content')?['$content'])" }Name:取自当前循环文件的名称ContentBytes:通过base64ToBinary函数将「获取文件内容」返回的Base64格式内容($content字段)转换为二进制字节流
- 在循环内调用OneDrive的「Get file content」操作,选择当前循环项的
发送邮件并关联附件数组
在Outlook「Send email V2」操作中,找到「Attachments」字段,直接选择之前初始化的AttachmentsArray变量即可。
常见错误排查
- 若流无法保存:检查
base64ToBinary函数的参数是否正确,必须指向「Get file content」返回的$content字段,避免拼写错误。 - 若附件仍损坏:确认附件对象的键名严格为
Name和ContentBytes,不可用其他别名(如FileName、Content);同时确保源文件本身未损坏,可单独下载验证。
如需进一步排查,可提供流程的JSON定义。
内容的提问来源于stack exchange,提问作者Oskar Leonardo Rojas G
相关产品推荐
相关产品推荐

