我有固定宽度的 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 插件来导入固定宽度 - 它是内置的。
脚步:
- 文本中的数据选项卡(获取外部数据部分)
- 选择您的 csv 文件
- 看到它调出了文本导入向导
- 在:原始数据类型中,选择“固定宽度”
- 根据向导继续操作