如果将一行添加到一个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
它将导入并生成:(按预期)
修改CSV:
key1:value1,key2:value2
key3:value3,key4:value4
key5:value5,key6:value6,key7:value7
刷新查询:
请注意,不会导入第三行中的第三列。
新查询将在第三列中显示,但Columns=
参数将更改为3
。
我尝试从Columns=2
的{{1}}语句中删除Source
参数(如其他帖子中所建议的那样),但这不会创建第三列(,除非那样第一行中有多余的列)。
如果将M-Code
自变量更改为Columns=2
,则将按需导入所有三列,但是无法提前知道潜在数量列。
我想一种解决方法是指定一个Columns=3
值,该值将大于可能出现的最大列数,然后删除空白列,但是似乎应该有一个更好的解决方案。
有什么想法吗?
答案 0 :(得分: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"