如何在含16.0/15.0等值的列指定位置插入双引号并跳过已存在项?
解决Power Query中Screen列插入双引号的问题
原代码报错原因
Table.TransformColumns参数格式错误:正确结构应为Table.TransformColumns(表名, {{列名, 转换函数}, ...}),你写错了列名与函数的嵌套结构each表达式里需用_指代当前列值,而非[Screen]- 重复的条件判断可以合并,无需多次写
if分支
正确实现代码
实现逻辑:仅当列值包含16.0/15.0/14.0、文本长度足够且第5位无引号时,才插入双引号,否则保留原内容。代码如下:
#"Insert double quote" = Table.TransformColumns( #"Remove unwanted charachter", { {"Screen", each let targetValues = {"16.0", "15.0", "14.0"}, containsTarget = List.AnyTrue(List.Transform(targetValues, (val) => Text.Contains(_, val))), hasQuoteAtPos = Text.Length(_) > 4 and Text.Range(_, 4, 1) = "\""" in if containsTarget and not hasQuoteAtPos then Text.Insert(_, 4, "\"""") else _, type text } } )
代码说明
targetValues:把需要匹配的数值放在列表中,后续新增或修改值只需调整列表即可containsTarget:用List.AnyTrue批量判断当前值是否包含列表中任意目标值,简化重复判断hasQuoteAtPos:先检查文本长度(避免索引越界报错),再判断第5位(Power Query索引从0开始,对应索引4)是否已有双引号Text.Insert(_, 4, "\""""):Power Query中双引号需用转义符表示,"""等价于一个双引号,插入位置设为索引4对应第5个字符位置
内容的提问来源于stack exchange,提问作者Asscha197
相关产品推荐
相关产品推荐

