如何使用Power Query批量转置TXT文件后合并为单个CSV文件
Power Query批量转置TXT文件并合并为CSV解决方案
错误原因
报错是因为Folder.Files返回的Content列存储的是文件的二进制原始数据,并非已解析的表格结构,直接对二进制值调用Table.Transpose会触发类型不匹配错误。
样例文件格式

修复后完整代码
let // 替换为你的TXT文件所在文件夹路径 Source = Folder.Files("你的文件夹完整路径"), // 筛选后缀为.TXT的文件 #"Filtered Rows" = Table.SelectRows(Source, each ([Extension] = ".TXT")), // 保留需要的列:文件内容、文件名 #"Removed Other Columns" = Table.SelectColumns(#"Filtered Rows",{"Content", "Name"}), // 核心步骤:对每个文件二进制先解析为表格,再转置、提升表头 #"Process Each File" = Table.AddColumn(#"Removed Other Columns", "FileData", each let // 解析TXT为表格,此处默认分隔符为制表符,如你的文件是逗号/空格可修改Delimiter参数 LoadTxt = Csv.Document([Content], [Delimiter="#(tab)", Encoding=65001, QuoteStyle=QuoteStyle.None]), // 转置表格:原第一列(探针名)变为表头行,原第二列(数值)变为数据行 Transposed = Table.Transpose(LoadTxt), // 提升第一行作为表头 PromotedHeaders = Table.PromoteHeaders(Transposed, [PromoteAllScalars=true]) in PromotedHeaders), // 合并所有文件的处理结果 #"Combine Results" = Table.ExpandTableColumn(#"Process Each File", "FileData", Table.ColumnNames(#"Process Each File"{0}[FileData])), // 可选:将文件名作为第一列,方便区分每行数据来源 #"Reordered Columns" = Table.ReorderColumns(#"Combine Results",{"Name"} & List.RemoveItems(Table.ColumnNames(#"Combine Results"), {"Name"})) in #"Reordered Columns"
注意事项
- 如果你的TXT文件分隔符不是制表符,修改
Csv.Document的Delimiter参数即可:逗号填",",空格填" " - 如果文件编码不是UTF-8,修改
Encoding参数:GBK编码填936,ANSI编码填1252 - 运行完成后可直接通过Power Query界面导出为CSV文件
内容的提问来源于stack exchange,提问作者Naja
相关产品推荐
相关产品推荐

