PowerQuery 解析固定宽度的 csv

PowerQuery 解析固定宽度的 csv

我有固定宽度的 csv.txt,例如

Martin    Junger    12    
John      Wing      124

要使用 PowerQuery 加载它,请使用以下语法:

let
    Source = Csv.Document(File.Contents("C:\csv.txt"),null,";",null,1251),
    #"Split Column name" = Table.SplitColumn(Source,"Column1",Splitter.SplitTextByPositions({0, 10}, false),{"name", "ColumnOther"}),
    #"Split Column surname" = Table.SplitColumn(#"Split Column name","ColumnOther",Splitter.SplitTextByPositions({0, 10}, false),{"surname", "ColumnOther"}),
    #"Split Column salary" = Table.SplitColumn(#"Split Column surname","ColumnOther",Splitter.SplitTextByPositions({0, 3}, false),{"salary", "ColumnOther"})
in
    #"Split Column salary"

因此,对于 csv 中的每一列,我都需要创建新Table.SplitColumn命令,这一点也不方便。是否有任何语法可以在一个命令中完成此操作?

谢谢

答案1

尽管文档中没有提到,但 Csv.Document 接受列表作为“可选分隔符”参数,指定每列的(从零开始的)起始位置。当我将 PQ 指向该文件时(例如使用 Excel 2016:数据功能区/新查询/来自文件/来自文本),您可以在下面的 PQ 生成的查询中看到这一点。“可选分隔符”参数是:{0,10,20}

let Source = Csv.Document(File.Contents("C:\csv.txt"),null,{0,10,20},null,1252), #"Changed Type" = Table.TransformColumnTypes(Source,{{"Column1", type text}, {"Column2", type text}, {"Column3", Int64.Type}}) in #"Changed Type"

答案2

您不需要使用 Excel 的 PowerQuery 插件来导入固定宽度 - 它是内置的。

脚步:

  1. 文本中的数据选项卡(获取外部数据部分)
  2. 选择您的 csv 文件
  3. 看到它调出了文本导入向导
  4. 在:原始数据类型中,选择“固定宽度”
  5. 根据向导继续操作

在此处输入图片描述

相关内容