在“读入”powerquery之前跳过6行

我试图自动化一些由Netsuite(我们的ERP软件)导出的CSV报告。 这些文件不会直接导入到PowerQuery中,因为有6行是“标题”行。 这些标题行没有正确数量的逗号,所以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" 

使用本机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 

在这里输入图像说明

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

这里代码:

 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" 

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

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