需求

需求来源于百度知道网友提问。如下图:
PowerQuery处理数据范围简写的例子 - 图1
由于原始数据把数据范围用【-】来连接,现在需要将这些简写补全,列出范围内的所有数据。

分析

目标结果是一个list,生成某个范围内步进1的list用{start..end}。需要确保start和end是数字格式,因此需要替换掉不需要的文本(”K000”)。

代码

分析有了思路之后,就可以写代码了,代码如下:

  1. let
  2. = Excel.CurrentWorkbook(){[Name="表1"]}[Content],
  3. 更改的类型 = Table.TransformColumnTypes(源,{{"列1", type text}}),
  4. 按分隔符拆分列 = Table.SplitColumn(更改的类型, "列1", Splitter.SplitTextByDelimiter("-", QuoteStyle.Csv), {"列1.1", "列1.2"}),
  5. 更改的类型1 = Table.TransformColumnTypes(按分隔符拆分列,{{"列1.1", type text}, {"列1.2", type text}}),
  6. 复制的列 = Table.DuplicateColumn(更改的类型1, "列1.1", "列1.1 - 复制"),
  7. 重命名的列 = Table.RenameColumns(复制的列,{{"列1.1 - 复制", "左侧"}}),
  8. 已添加自定义 = Table.AddColumn(重命名的列, "右侧", each if [列1.2]= null then [左侧] else [列1.2]),
  9. 删除的其他列 = Table.SelectColumns(已添加自定义,{"列1.1", "左侧", "右侧"}),
  10. 重命名的列1 = Table.RenameColumns(删除的其他列,{{"列1.1", "data"}}),
  11. 替换的值 = Table.ReplaceValue(重命名的列1,"K000","",Replacer.ReplaceText,{"左侧", "右侧"}),
  12. 更改的类型2 = Table.TransformColumnTypes(替换的值,{{"左侧", Int64.Type}, {"右侧", Int64.Type}}),
  13. 已添加自定义1 = Table.AddColumn(更改的类型2, "step", each [右侧]-[左侧]),
  14. 已添加自定义2 = Table.AddColumn(已添加自定义1, "result", each {[左侧]..[右侧]}),
  15. #"展开的“list”" = Table.ExpandListColumn(已添加自定义2, "result"),
  16. 更改的类型3 = Table.TransformColumnTypes(#"展开的“list”",{{"result", type text}}),
  17. 已添加自定义3 = Table.AddColumn(更改的类型3, "自定义", each Text.Combine({"K000",[result]})),
  18. 删除的其他列1 = Table.SelectColumns(已添加自定义3,{"自定义"})
  19. in
  20. 删除的其他列1

附件

由于语雀不支持附件下载,所以提供百度网盘附件:
链接: https://pan.baidu.com/s/1HMLfcOuMp8P6looS24EcfA 提取码: 2mn2