首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Excel -查询CSV缺少的列

Excel -查询CSV缺少的列
EN

Stack Overflow用户
提问于 2016-02-08 18:16:51
回答 3查看 1.4K关注 0票数 1

因此,我正在使用Office2016的新查询功能从各个CSV端点获取数据。我设法让它与雅虎金融公司( Yahoo )合作,但我似乎无法让晨星(Morningstar)工作。当我在浏览器中访问这个链接时,我会下载一个完整的CSV,其中包含所有正确的数据:

链接:http://financials.morningstar.com/ajax/ReportProcess4CSV.html?t=MSFT&reportType=is&period=12&dataType=A&order=asc&columnYear=10&number=3

但是,当我使用查询功能时,它只加载第一行。我猜这是因为只有CSV第一行中的第一列有数据,导致它忽略了其余的列。有人知道如何忽略第一行并开始从第二行导入CSV吗?

代码语言:javascript
复制
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参数;也许这会有帮助?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-02-08 19:02:36

额外值参数可以检索额外的行(使用ExtraValues.List),但是表的形状将很难处理。

这里有一种获取值的方法:

代码语言:javascript
复制
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文件只有一列的头语句。然后根据逗号位置将行拆分为列,然后将第一行作为列名。

票数 2
EN

Stack Overflow用户

发布于 2016-02-08 18:30:54

请参阅https://msdn.microsoft.com/en-us/library/mt260840.aspx?f=255&MSPPError=-2147217396

代码语言:javascript
复制
let

Source = Csv.Document(File.Contents("C:\Projects\Examples\SalesForceContacts.txt"),
    [Delimiter=",",Encoding=1252]),
    #"First Row as Header" = Table.PromoteHeaders(Source),
    ...

但是,如果标题行已损坏,则此操作可能无效。

票数 0
EN

Stack Overflow用户

发布于 2016-11-30 18:24:05

除非显式指定列数,否则将使用第一行确定列数。由于示例的第一行仅包含第一列中的值,因此生成的表也只包含一个。

此代码返回7列:

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35276463

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档