刷新 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无法加载到电子表格