Power Query如何将含小写字母的行置为null并替换指定前缀行
问题修正方案
你的问题出在判断非全大写行的逻辑上:原代码里[FRUITS] = Text.Lower([FRUITS])仅会匹配完全小写的文本,而像"vitamin C"这种大小写混合的内容无法触发该条件。
要实现「所有包含小写字母的行(非全大写)置为null」的需求,只需把判断条件改为检查原文本是否不等于其全大写版本,或者直接检查文本中是否存在小写字母。
修正后的代码
let Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WCvMMcfT19FNwVNBwcg1x1HV2DPIPcfVz1VSK1YlWKsssSczNzFNwBvNQhFzBPF9Hdz/XYM9QXzCvKjMvGaESTAR4+AcDcZB/aDBC0M3fx9NZwdHZ00UpNhYA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [FRUITS = _t]), #"Changed Type" = Table.TransformColumnTypes(Source,{{"FRUITS", type text}}), Custom1 = Table.AddColumn(#"Changed Type", "WITHOUT LOWERCASE", each if Text.Start(Text.From([FRUITS]),5)="FOLIC" then "NOT VITAMIN" // 修正:判断原文本是否不等于全大写版本(即存在小写字母) else if [FRUITS] <> Text.Upper([FRUITS]) then null else [FRUITS] ) in Custom1
另一种可选实现(直接检查小写字母)
如果你想更直观地检查是否包含小写字母,可以用Text.ContainsAny配合小写字母集合:
let Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WCvMMcfT19FNwVNBwcg1x1HV2DPIPcfVz1VSK1YlWKsssSczNzFNwBvNQhFzBPF9Hdz/XYM9QXzCvKjMvGaESTAR4+AcDcZB/aDBC0M3fx9NZwdHZ00UpNhYA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [FRUITS = _t]), #"Changed Type" = Table.TransformColumnTypes(Source,{{"FRUITS", type text}}), Custom1 = Table.AddColumn(#"Changed Type", "WITHOUT LOWERCASE", each if Text.Start(Text.From([FRUITS]),5)="FOLIC" then "NOT VITAMIN" // 检查文本是否包含任意小写字母 else if Text.ContainsAny([FRUITS], {"a".."z"}) then null else [FRUITS] ) in Custom1
两种方案都能正确处理"vitamin C"这类大小写混合的行,将其置为null,同时保留全大写的内容,并且正确替换以FOLIC开头的行。
内容的提问来源于stack exchange,提问作者Rasec Malkic
相关产品推荐
相关产品推荐

