在"阅读"之前跳过6行进入powerquery

时间:2016-09-16 15:34:39

标签: excel csv powerpivot powerquery

我正在尝试自动化一些由Netsuite(我们的ERP软件)的CSV导出构建的报告。这些文件永远不会直接导入到PowerQuery中,因为有6行是" header"行。这些标题行没有正确的逗号数量,因此PowerQuery仅显示1列数据。我目前正在使用Notepad ++打开文件并删除这6行,然后将文件导入PowerQuery。

有没有办法使用PowerQuery代码跳过前6行,以便正确读取csv?以下是我正在使用的数据示例。

Fake Cocoa Company LLC
"Fake Cocoa Company, LLC (Consolidated)"
Sales Order Detail - Hotel - BH
"January 1, 2016 - December 31, 2016"

"Options: Show ZerosFilters: Customer/Project (equal to FCC - Hotel Hotel ), Validated Status (not equal to Cancelled, Closed )"
Document Number ,Date ,Ship To ,Item: Description (Sales) ,Quantity ,Validated Status ,Unit Price ,Aggregate Amount 
Sales Orders,,,,,,,
669,9/15/2016,Receiving - CCLV Hotel 2880 Some Place Blvd South Hotel Hotel Some Place CA 91089,100% Country Caf  Liquid Cocoa,5,Billed,$75.68,$378.40
660,,,,,,,
,9/15/2016,Receiving - MAIN OCEAN Hotel 4300 Some Place Blvd SO Some Place CA 91089,100% Country Caf  Liquid Cocoa,10,Billed,$7.68,$75.80
,9/15/2016,Receiving - MAIN OCEAN Hotel 4300 Some Place Blvd SO Some Place CA 91089,Fake Cocoa Grand - Whole Bean 5/5LB,8,Billed,$17.80,$72.00
,9/15/2016,Receiving - MAIN OCEAN Hotel 4300 Some Place Blvd SO Some Place CA 91089,Fake Cocoa Grand 28/9oz,6,Billed,$5.54,$39.24
,9/15/2016,Receiving - MAIN OCEAN Hotel 4300 Some Place Blvd SO Some Place CA 91089,Fake Cocoa Grand 42/2oz,4,Billed,$1.32,$7.28
,9/15/2016,Receiving - MAIN OCEAN Hotel 4300 Some Place Blvd SO Some Place CA 91089,Fake Cocoa Caf - Whole Bean 5/5LB,2,Billed,$2.80,$28.00
Total - 660,,,,,,,"$203.32"

3 个答案:

答案 0 :(得分:3)

使用本机CSV PowerQuery解析器

let
    file_path = "C:\your_path\csv.txt",
    file = File.Contents(file_path),
    src = Lines.FromBinary(file),
    skip = List.Skip(src,6),
    combine = Text.Combine(skip, "#(lf)"),
    csv = Csv.Document(combine),
    promote = Table.PromoteHeaders(csv)
in
    promote

enter image description here

答案 1 :(得分:1)

table.skip可以做你想做的事情

第二个参数可以是数字(例如6)或条件(例如(#"Position of ""Options: Show ZerosFilters: Customer/Project (equal to FCC - Hotel Hotel ), Validated Status (not equal to Cancelled, Closed )""" + 1)

答案 2 :(得分:1)

问题是您尝试将“来自CSV”的Power Query中的CSV导入为源。拥有描述内容的第一行将打破自动转换。因此,为了防止这种情况,您必须以另一种方式将文件导入PQ。这个问题在Ken的Excelguru Blog中得到了很好的描述(顺便说一句:我热烈推荐他的书)。

这里是代码:

let
    /* Get the raw line by line contents of the file, preventing PQ from interpreting it */
    fnRawFileContents = (fullpath as text) as table =>
    let
        Value = Table.FromList(Lines.FromBinary(File.Contents(fullpath)),Splitter.SplitByNothing())
    in Value,

    /* Use function to load file contents */
    Source = fnRawFileContents("D:\yourfile.csv"),
    #"Removed Top Rows" = Table.Skip(Source,6),
    #"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", "Column1.8"}),
    #"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}, {"Column1.8", type text}}),
    #"Promoted Headers" = Table.PromoteHeaders(#"Changed Type")

in
    #"Promoted Headers"