Power Apps中批量处理集合SVG URI生成独立SVG及动态获取PageNo
问题解决方案
一、修复SVG集合的创建(独立存储每个Page的SVG URI)
原代码的问题是把所有Page的SVG URI打包成单条记录里的数组,导致后续批量处理无法区分独立文件;同时Filter(Coords,PageNo=1)用了固定值,需替换为动态获取当前循环的PageNo。
修改后的代码:
ClearCollect( SVGCollection, ForAll( // 获取所有不重复的PageNo,每条记录对应一个Page Distinct(Coords, PageNo) As PageRecords, { // 新增文件名标识,方便后续生成独立文件 FileName: "Page_" & PageRecords.Value & ".svg", SVGUri: "data:image/svg+xml," & EncodeUrl( "<svg height='100%' width='100%' viewBox='2 400 2000 180' xmlns='http://www.w3.org/2000/svg'>" & Concat( // 动态筛选当前循环的PageNo对应的坐标数据 Filter(Coords, PageNo = PageRecords.Value), "<text x='" & Left & "' y='" & Top & "' font-family='Arial' font-size='16' fill='black'>" & Text & "</text>" ) & "</svg>" ) } ) );
修改说明:
- 直接用
ForAll生成SVGCollection的每条记录,每个记录对应一个Page的SVG URI和文件名 - 用
As PageRecords给Distinct结果命名,通过PageRecords.Value动态获取当前循环的PageNo,替代原代码的固定值1 - 新增
FileName字段,后续在Power Automate中可直接用于命名SVG文件
二、Power Automate批量生成独立SVG文件并邮件发送
步骤1:创建触发流
选择Power Apps作为触发器,接受来自Power Apps的SVGCollection参数(类型选数组)
步骤2:初始化附件数组变量
添加初始化变量动作,变量名设为SVGAttachments,类型选数组,初始值为空数组
步骤3:循环处理每个SVG记录
添加Apply to each动作,选择触发参数里的SVGCollection作为循环对象,在循环内依次添加以下动作:
- Compose:处理SVG URI,去掉前缀。输入表达式:
(若URI经过编码,需解码:replace(items('Apply_to_each')?['SVGUri'], 'data:image/svg+xml,', '')decodeUriComponent(replace(items('Apply_to_each')?['SVGUri'], 'data:image/svg+xml,', ''))) - Create file:在OneDrive/SharePoint创建临时SVG文件
- 站点地址/文件夹路径:选择临时存储位置
- 文件名称:
items('Apply_to_each')?['FileName'] - 文件内容:选择上一步Compose的输出
- Append to array variable:将创建好的文件添加到
SVGAttachments数组,输入对象:{ "Name": "@items('Apply_to_each')?['FileName']", "ContentBytes": "@body('Create_file')?['$content']" }
步骤4:发送邮件
添加Send an email (V2)动作,在附件部分选择之前初始化的SVGAttachments变量,填写收件人、主题等字段完成配置
关键说明
- 先将所有文件收集到数组变量,再一次性添加到邮件附件,避免文件合并问题
- 可在邮件发送后添加Delete file动作清理临时文件
内容的提问来源于stack exchange,提问作者Anrunya Patole
相关产品推荐
相关产品推荐

