刷新CSV导入时,Power Query无法添加列

问题描述 投票:1回答:1

如果将一行添加到csv文件,并且该行具有比原始行更多的“列”,则在刷新现有查询时,Power Query将不会为新行添加列。

如果生成了新查询,则会显示额外列。我猜这是因为PQ查看前200行(默认情况下)行来确定创建查询时的格式。

原始csv文件:

key1:value1,key2:value2
key3:value3,key4:value4

原始M代码

let
    Source = Csv.Document(File.Contents("d:\Users\Ron\Desktop\myCSV.csv"),[Delimiter=",", Columns=2, Encoding=1252, QuoteStyle=QuoteStyle.None])
in
    Source

它将导入并生成:(如预期的那样)

enter image description here

修改CSV:

key1:value1,key2:value2
key3:value3,key4:value4
key5:value5,key6:value6,key7:value7

刷新查询:

enter image description here

请注意,不会导入第三行的第三列。

新查询将获取第三列,但Columns=参数将更改为3

我已经尝试从Columns=2中的Source语句中删除M-Code参数(如其他帖子中所建议的那样),但不会创建第三列(除非第一行中存在额外的列)。

如果Columns=2参数更改为Columns=3,则将根据需要导入所有三列,但无法事先知道潜在列的数量。

我想一个解决方法是指定一个Columns=值,它将大于可能存在的最大可想象的列数,然后删除空白列,但似乎应该有一个更好的解决方案。

有什么想法吗?

excel csv office365 powerquery m
1个回答
1
投票

我认为最简单的方法是使用换行符作为分隔符将其作为单个列加载,然后在查询编辑器中拆分列。

let
    Source = Csv.Document(File.Contents("d:\Users\Ron\Desktop\myCSV.csv"),[Delimiter="#(lf)", Encoding=1252, QuoteStyle=QuoteStyle.None]),
    #"Split Column by Delimiter" = Table.SplitColumn(Source, "Column1", Splitter.SplitTextByDelimiter(",", QuoteStyle.Csv), {"Column1.1", "Column1.2", "Column1.3"})
in
    #"Split Column by Delimiter"
© www.soinside.com 2019 - 2024. All rights reserved.