使用Power Query M代码提取CSV数据时如何同时获取文件名?

我尝试使用以下M代码将CSV数据提取到表格中,但提取过程中无法获取文件名列。
原M代码
let Source = Folder.Files(#"Folder Path"), #"CombinedBinaries" = Binary.Combine (Source [Content]), #"ImportedText" = Lines.FromText(Text.FromBinary(CombinedBinaries)), #"TableFromList" = Table.FromList(ImportedText, Splitter.SplitTextByDelimiter("#(tab)"), null, null, ExtraValues.Error)
是否可以在获取CSV数据的同时也获取文件名?
解决方案
你当前的代码通过Binary.Combine把所有文件的二进制内容合并,丢失了单个文件的元数据关联,自然无法获取文件名。要同时保留数据和文件名,需要逐个处理每个文件,添加文件名后再合并数据,修改后的M代码如下:
let Source = Folder.Files(#"Folder Path"), // 逐个处理文件,添加文件名到对应数据中 #"Added Custom" = Table.AddColumn(Source, "FileData", each let // 读取当前文件的制表符分隔数据 ImportedCSV = Csv.Document([Content], [Delimiter="#(tab)", Encoding=1252]), // 提升第一行为表头(如果CSV无表头,可删除此步骤) PromotedHeaders = Table.PromoteHeaders(ImportedCSV, [PromoteAllScalars=true]), // 添加当前文件名作为新列 AddedFileName = Table.AddColumn(PromotedHeaders, "文件名", each [Name]) in AddedFileName), // 展开所有文件的数据表格 #"Expanded FileData" = Table.ExpandTableColumn(#"Added Custom", "FileData", List.Union(List.Transform(#"Added Custom"[FileData], Table.ColumnNames))), // 移除不需要的元数据列(按需保留或删除) #"Removed Columns" = Table.RemoveColumns(#"Expanded FileData", {"Content", "Extension", "Date accessed", "Date modified", "Date created", "Attributes", "Folder Path"}) in #"Removed Columns"
关键说明:
- 放弃
Binary.Combine合并操作,改为逐个处理文件,保留每个文件的[Name](文件名)元数据 - 通过嵌套的
Table.AddColumn给每个文件的数据集添加文件名 - 最后展开所有子表格,合并成包含文件名的完整数据集
- 如果你的CSV没有表头,直接删除
PromotedHeaders步骤,用ImportedCSV执行后续添加文件名的操作
内容的提问来源于stack exchange,提问作者Amar Gunjal
相关产品推荐
相关产品推荐

