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

Posted

技术标签:

【中文标题】刷新 CSV 导入时 Power Query 无法添加列【英文标题】:Power Query not able to add columns when refreshing CSV import 【发布时间】:2019-04-12 19:44:31 【问题描述】:

如果将一行添加到 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

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

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

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

有什么想法吗?

【问题讨论】:

不能在 CSV 文件中添加标题行或在前两行末尾添加逗号吗?您修改后的 CSV 格式不是很标准。 @AlexisOlson 我同意格式是非标准的;而且我无法控制它是如何生成的。 我认为这是一个错误,因为我在“正常”格式的 CSV 文件中遇到了这个问题,其中所有行都有相同的列数。如果我对现有查询调用“刷新”,我的 CSV 新添加的列不会被拾取。 我的错,如果我删除查询的“Columns=XX”部分,那么在我的情况下它可以正常工作!我应该仔细阅读你的问题。 【参考方案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"

【讨论】:

谢谢。简单有效。

以上是关于刷新 CSV 导入时 Power Query 无法添加列的主要内容,如果未能解决你的问题,请参考以下文章

Excel 2016 Power Query无法加载到电子表格

如何等待 Power Query 刷新完成?

Excel Power Query导入MySQL数据

在 Power Query 编辑器中将大 json 转换为 csv 时的限制

Power Query,刷新时保持输出表相同大小

无法将 Power Query 的文件错误加载到 Power Pivot 中……不是程序员,但之前这样做没有问题