基本函數(3)
- Text.StartsWith
- Text.EndsWith
- Text. Contains
Text.StartWith/Text.EndWith/Text.Contains
實例: 查詢系統
M code:
let
源 = Excel.Workbook(File.Contents("E:\data.xlsx"), null, true)[Data],
表 = Table.Combine(List.Transform(源, each Table.PromoteHeaders(_, [PromoteAllScalars=true]))),
a = Table.ToRecords(表),
b = List.Select(a, each {Text.StartsWith,Text.EndsWith,Text.Contains}{List.PositionOf({"始於","止於","包含"},條件{0}[值])}({[公司名],[地址]}{List.PositionOf({"公司名","地址"},條件{1}[值])}, 條件{2}[值])),
c = Table.FromRecords(b)
in
c
正常查詢:
b = List.Select(a, each Text.Contains([公司名],"關鍵字"))
參數化:
- 字段參數化
= {查詢系統[公司名],查詢系統[地址]}{List.PositionOf({"公司名","地址"},條件{1}[值])}
由於上下文的存在,表名可省略.即:
= {[公司名],[地址]}{List.PositionOf({"公司名","地址"},條件{1}[值])}
- 同理,函數參數化
= {Text.StartsWith,Text.EndsWith,Text.Contains}{List.PositionOf({"始於","止於","包含"},條件{0}[值])}
Text.Repeat/Text.SplitAny
- Text.Repeat(字符,重復次數)
- Text.SplitAny(文本,拆分字符串)
Text.SplitAny拆分字符串:可以是多個字符串
- 實例1:統計各部門人數
- 實例2:規范編號
- 實例3:進度圖制作
實例1:統計各部門人數
let
源 = Excel.CurrentWorkbook(){[Name="表2"]}[Content],
已添加自定義 = Table.AddColumn(源, "計數", each List.Count(Text.SplitAny([業績],"\、")))
in
已添加自定義
實例2:規范編號
let 源 = Excel.CurrentWorkbook(){[Name="表2_5"]}[Content], 更改的類型 = Table.TransformColumnTypes(源,{{"編號", type text}}), 已添加自定義 = Table.AddColumn(更改的類型, "自定義", each Text.Combine(List.Transform(Text.SplitAny([編號],Text.Remove(Text.Combine(源[編號]),{"0".."9"})),each Text.Repeat("0",4-Text.Length(_))&_),"\")) in 已添加自定義
取出分隔符:
= Text.Remove(Text.Combine(實例2[編號]),{"0".."9"})
去重分隔符:
= List.Distinct(Text.ToList(Text.Remove(Text.Combine(實例2[編號]),{"0".."9"})))
合並分隔符:
=Text.Combine(List.Distinct(Text.ToList(Text.Remove(Text.Combine(實例2[編號]),{"0".."9"}))))
實例3:進度圖制作

let 源 = Excel.CurrentWorkbook(){[Name="表4"]}[Content], 已添加自定義 = Table.AddColumn(源, "進度圖", each Text.Combine(List.Transform(Text.SplitAny([業績],Text.Combine(List.Distinct(Text.ToList(Text.Remove(Text.Combine(源[業績]),{"0".."9","一".."龥"}))))),each _&Text.Repeat("|",Number.From(Text.Remove(_,{"一".."龥"}))/1000)),"#(lf)")) in 已添加自定義
取分隔符:
=Text.Combine(List.Distinct(Text.ToList(Text.Remove(Text.Combine(實例3[業績]),{"0".."9","一".."龥"}))))
Text.PadStart/Text.PadEnd
- Text.PadStart(文本,位寬,字符)
- Text.PadEnd(文本,位寬,字符)
實例1
let 源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content], 已添加自定義 = Table.AddColumn(源, "修正編號", each Text.Combine(List.Transform(Text.Split([編號],"-"),each "NED"&Text.PadStart(_,4,"0")),"-")) in 已添加自定義
實例2
let
源 = Excel.CurrentWorkbook(){[Name="表3"]}[Content],
已添加自定義 = Table.AddColumn(源, "圖形", each Text.Combine(List.Transform(Text.Split([1季度],"-"),each Text.PadEnd(Text.Repeat("★",Number.From(_)),10,"☆") ),"#(lf)")),
刪除的其他列 = Table.SelectColumns(已添加自定義,{"圖形"})
in
刪除的其他列
Text. Clean\Text. Lower\Text. Upper\Text. Trim\Text.TrimEnd\Text.TrimStart\Text.Proper
- Text.Clean(文本) 清除非打印字符,如回車符,換行符等
- Text.Trim()同時清除前導和后綴空格,也可以清除指定字符
- Text.TrimStart清除前導空格,也可以清除指定字符
- Text.TrimEnd清除后綴空格,也可以清除指定字符
- Text.Lower 字母小寫
- Text.Upper 字母大寫
- Text.Proper 首詞首字母大寫,其余小寫
實例1
let
源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content],
更改的類型 = Table.TransformColumnTypes(源,{{"語句", type text}}),
a = Table.AddColumn(更改的類型, "提取", each Text.Trim([語句],{"一".."龥","0".."9"})),
已添加自定義 = Table.AddColumn(a, "序號", each Number.From(Text.SplitAny([提取],"[]"){1})),
排序的行 = Table.Sort(已添加自定義,{{"序號", Order.Ascending}}),
刪除的列 = Table.RemoveColumns(排序的行,{"語句"})
in
刪除的列
Combiner合並器
- Combiner.CombineTextByDelimiter(符號)(list) 使用指定符號將列表合並為單個文本
- Combiner.CombineTextByEachDelimiter(list)(list) 將符號列表對應列表合並為一個文本
- Combiner.CombineTextByLengths(list)(list) 使用指定長度將列表合並為單個文本
- Combiner.CombineTextByPositions(list)(list) 指用指定位置合並列表為一個文本
- Combiner.CombineTextByRanges(list as list)(list) 根據指定的位置和長度將列表合並為一個文本
Combiner.CombineTextByDelimiter
Combiner.CombineTextByEachDelimiter
Combiner.CombineTextByLengths
注:分別提取3,1,2個字符,其余的按預配字符填充
Combiner.CombineTextByPositions
注:位置序列必須按序填寫,即0<1<4<5;說明:0位在串1取,1~3位在串2取,4位在串3取,其余按預配字符填充
Combiner.CombineTextByRanges
注:在串1從1位開始取2個,在串2從3位開始取5個(本可3位全取但{5,2}限制了從5位取),在串3從5位開始取2個,其余按預配字符填充
實例:
- 給名單加編號
- 將名單對齊
- 提取等級
let 源 = Excel.CurrentWorkbook(){[Name="表1"]}[Content], 已添加自定義 = Table.AddColumn(源, "自定義", each Text.Middle(Combiner.CombineTextByEachDelimiter(List.Transform({"1".."9"},each "、"&_&"."))({""}&Text.Split([名單],"、")),1,99)) in 已添加自定義
let
源 = Excel.CurrentWorkbook(){[Name="表2"]}[Content],
更改的類型 = Table.TransformColumnTypes(源,{{"組別", type text}, {"名單", type text}}),
已添加自定義 = Table.AddColumn(更改的類型, "自定義", each Text.Combine(List.Transform(Text.Split([名單],"、"),each Combiner.CombineTextByLengths({Text.Length(_)}," ")({_}))))
in
已添加自定義
let
源 = Excel.CurrentWorkbook(){[Name="表3"]}[Content],
已添加自定義 = Table.AddColumn(源, "自定義", each Combiner.CombineTextByPositions({1..12})(List.Range(Record.ToList(_),1,99)))
in
已添加自定義
Spliter拆分器
- Splitter.SplitByNothing 不拆分
- Splitter.SplitTextByDelimiter 根據指定分隔符將文本拆分成單個列表
- Splitter.SplitTextByEachDelimiter 指定每一個列表中的分隔符對文本進行拆分
- Splitter.SplitTextByLengths按每個指定的長度拆分文本為列表
- Splitter.SplitTextPositions指定每個位置將文本拆分成列表
- Splitter.SplitTextByRanges根據指定每個偏移量和長度將文本拆分成列表
- Splitter.SplitTextByWhitespace以空白字符為准將文本拆分成列表
實例
- 以序號拆分記錄
- 將身份證號用符號分隔
let
源 = Excel.CurrentWorkbook(){[Name="表2"]}[Content],
更改的類型 = Table.TransformColumnTypes(源,{{"數據", type text}}),
已添加自定義 = Table.AddColumn(更改的類型, "a", each Table.FromRows({List.Range(Splitter.SplitTextByEachDelimiter(List.Transform({1..9},each Number.ToText(_,"0\.")))([數據]),1,99)} ))[a],
自定義1 = Table.Combine(已添加自定義)
in
自定義1
let
源 = Excel.CurrentWorkbook(){[Name="表4"]}[Content],
已添加自定義 = Table.AddColumn(源, "分段后", each Text.Combine(Splitter.SplitTextByLengths(if Text.Length([身份證號])=18 then {6,8,4} else {6,6,3})([身份證號])," ")),
刪除的列 = Table.RemoveColumns(已添加自定義,{"姓名", "身份證號"})
in
刪除的列
1