我正在尝试自动化一些由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"
答案 0 :(得分:3)
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
答案 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"