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

儘管 doco 中未提及,但 Csv.Document 接受清單作為「可選分隔符號」參數,指定每列的(從零開始的)起始位置。當我將其指向該文件時,您可以在下面的 PQ 生成的查詢中看到這一點(例如使用 Excel 2016:資料功能區/新查詢/來自文件/來自文字)。 “可選分隔符號”參數是:{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. 根據需要繼續執行嚮導

在此輸入影像描述

相關內容