Excel – 查询CSV缺失列
因此,我使用Office 2016的新查询function从各个CSV API端点获取数据。 我设法让它与雅虎财务的合作,但我似乎无法得到晨星的工作。 当我在浏览器中访问这个链接时,我下载了一个完整的CSV文件,里面包含所有正确的数据:
链接: http : //financials.morningstar.com/ajax/ReportProcess4CSV.html?t=MSFT&reportType=is&period=12&dataType=A&order=asc&columnYear=10&number=3
但是,当我使用查询function时,它只加载第一行。 我猜这是因为只有在CSV第一行的第一列有数据,导致它忽略其余的列。 有谁知道如何忽略第一行,并从第二行开始导入CSV?
let Source = Csv.Document(Web.Contents("http://financials.morningstar.com/ajax/ReportProcess4CSV.html?t=MSFT&reportType=is&period=12&dataType=A&order=asc&columnYear=10&number=3"),[Delimiter=",",Encoding=1252]) in Source
提前致谢!
编辑:在Csv.Document,它看起来像有一个extraValues参数; 也许这可能有帮助?
额外的值参数可以检索您的额外的行(使用ExtraValues.List),但表的形状将很难处理。
以下是获取值的一种方法:
let Source = Table.FromColumns({Lines.FromBinary((Web.Contents("http://financials.morningstar.com/ajax/ReportProcess4CSV.html?t=MSFT&reportType=is&period=12&dataType=A&order=asc&columnYear=10&number=3")),null,null,1252)}), #"Removed Top Rows" = Table.Skip(Source,1), #"Split Column by Delimiter" = Table.SplitColumn(#"Removed Top Rows","Column1",Splitter.SplitTextByDelimiter(",", QuoteStyle.Csv),{"Column1.1", "Column1.2", "Column1.3", "Column1.4", "Column1.5", "Column1.6", "Column1.7"}), #"Changed Type" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{"Column1.1", type text}, {"Column1.2", type text}, {"Column1.3", type text}, {"Column1.4", type text}, {"Column1.5", type text}, {"Column1.6", type text}, {"Column1.7", type text}}), #"Promoted Headers" = Table.PromoteHeaders(#"Changed Type") in #"Promoted Headers"
该查询将CSV文件视为行的文本文档。 它删除了第一行,这是一些使语法分析器认为CSV文件只有一列的标题语句。 然后根据逗号分割将行分割成列,然后使第一行成为列名。
请参阅https://msdn.microsoft.com/zh-cn/library/mt260840.aspx?f=255&MSPPError=-2147217396 :
let Source = Csv.Document(File.Contents("C:\Projects\Examples\SalesForceContacts.txt"), [Delimiter=",",Encoding=1252]), #"First Row as Header" = Table.PromoteHeaders(Source), ...
但是,如果标题行损坏,这可能无法正常工作。
除非明确指定列数,否则使用第一行确定。 由于示例的第一行仅包含第一列中的值,因此生成的表也只包含一个值。
这段代码返回7列:
let Source = Web.Contents("http://financials.morningstar.com/ajax/ReportProcess4CSV.html?t=MSFT&reportType=is&period=12&dataType=A&order=asc&columnYear=10&number=3"), Csv = Csv.Document(Source,[Delimiter=",", Columns=7, Encoding=1252, QuoteStyle=QuoteStyle.None]) in Csv