想在一个表中,每行有文本和数字混合,比如 “*400元,**300元”,想在这个表中增加一列 计算出“合计”700元,思路用Text.SplitAny 和List.transfrommany 作为核心来做,但不成功,求高手给方案!!

想在一个表中,每行有文本和数字混合,比如 “*400元,**300元”,想在这个表中增加一列 计算出“合计”700元,思路用Text.SplitAny 和List.transfrommany 作为核心来做,但不成功,求高手给方案!!

该题识别为提取数字,不含小数点及千分位符等,可以考虑引入Web.Page正则查找等。其他解决方案可能用到Splitter.SplitTextByAnyDelimiter,Character.FromNumber,List.Accumulate,Expression.Evaluate等函数。一个适用部分情况的简单的解答为
let
源 = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WSjRU0lF6umn2846NTzs2PNm7wNjgaWvz+z09z2e1PF2y/OWM/U83THk6tcsEJKwUqwPUYQTU8Xz5+qcdbeYGMMUbdz9tXfF8QrOlhTlQ5HFDE0SpMVDpy0XtQCOAip7s7Hg6dZmZqbkJRNOTPb0vN7eYmcENNgGqfrZm+dMVjUDy2bR2MyMDHCpNgSpfrN8GdN3L9h5DA4iV4fmZqUYQZ8YCAA==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [类型1 = _t, 数据 = _t]),
求和 = Table.AddColumn(源, "合计", each List.Sum(List.Transform(Text.SplitAny([数据], Text.Remove([数据],{"0".."9"})),Number.From)))
in
求和
思路为字符按汉字、标点符号及其他除数字外的特殊符号的任意字符拆分,然后转换为数字再求和。
其他情形,如有小数点等可能PQ表达式就复杂些。
PQ参考解法
看了回复,真乃高人也!!
上一个有点问题。
let
源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content],
合计 = Table.AddColumn(源,
"合计",
each
List.Sum(
List.Transform(Text.Split(_[数据],"元"),
(x)=>List.Max(List.Transform({0..15},
(y)=>try Number.From(Text.End(x,y)) otherwise null ))
)
)
)
in
合计