Power Automate循环提取Azure文档处理发票数据的valueString/valueNumber
从Azure文档处理服务发票数据中提取valueString/valueNumber的简便方法
一、先理清数据结构
你拿到的发票数据里,Items.valueArray是一个数组,每个元素的valueObject里的字段(比如Amount)有两种结构:要么带valueNumber(数字类型),要么带valueString(字符串类型),我们的目标是不管哪种结构,都能把对应的值取出来。
二、Power Automate里的实操方法
1. 先循环遍历所有发票项
添加「应用到每一个」动作,把Items.valueArray选成要循环的对象,这样就能逐个处理每个发票条目。
2. 用表达式一键提取对应值
针对每个字段(比如Amount、Description),用coalesce函数就能自动取到存在的那个值,不用写复杂的条件判断:
提取Amount值的表达式:
coalesce(items('应用到每一个')?['valueObject']?['Amount']?['valueString'], items('应用到每一个')?['valueObject']?['Amount']?['valueNumber'])这个函数的逻辑是:先找valueString,有就用它;没有就用valueNumber,完美适配两种结构。
如果需要把结果统一转成字符串(比如数字转成文本格式),套个
string()就行:string(coalesce(items('应用到每一个')?['valueObject']?['Amount']?['valueString'], items('应用到每一个')?['valueObject']?['Amount']?['valueNumber']))
3. 批量处理多个字段更高效
如果要一次性提取Amount、Description等多个字段,用「选择」动作更省事:
- 把「选择」动作的输入设为
Items.valueArray,然后在映射里逐个设置字段:- 键填
Amount,值填上面的提取表达式 - 键填
Description,值换一下字段名就行:coalesce(item()?['valueObject']?['Description']?['valueString'], item()?['valueObject']?['Description']?['valueNumber'])
做完之后,「选择」动作会直接输出整理好的数组,每个元素都包含你要的字段值。
- 键填
三、偷懒小技巧
你看每个字段里还有个text字段,不管是数字还是字符串类型,这个字段都是字符串形式的结果,如果它和value值是一致的,直接取text更简单:
items('应用到每一个')?['valueObject']?['Amount']?['text']
内容的提问来源于stack exchange,提问作者Brad Mitchell
相关产品推荐
相关产品推荐

