SSDT 2017 Get Data导入同文件夹多平面文件(csv/txt)问题咨询
如何用Power Query导入同一文件夹下的多个CSV/TXT文件
我刚好处理过类似的需求,用Power Query导入同一文件夹下的多个CSV/TXT文件其实很直观,核心是连接到文件夹而非单个文件,下面一步步给你拆解操作和M代码逻辑:
一、建立初始数据源连接
绝对不要选单个文件,直接连接到存放所有CSV/TXT的目标文件夹:
- 打开Power Query编辑器(不管是Excel里的「数据」>「获取数据」,还是Power BI的「主页」>「获取数据」)
- 选择「从文件」>「从文件夹」
- 弹出路径选择框后,选中你的目标文件夹,点击「确定」
- 此时你会看到文件夹内所有文件的元数据列表(包括文件名、扩展名、路径、修改时间等)
二、构建查询链(M代码操作)
接下来通过几步操作把元数据转换成合并后的文件内容,你可以用可视化操作生成M代码,也可以直接编辑M代码:
1. 筛选目标文件类型
首先只保留你需要的CSV/TXT文件:
- 在「扩展名」列的筛选按钮上点击,只勾选
.csv或.txt(根据你的需求) - 这一步对应的M代码逻辑是
Table.SelectRows(Source, each [Extension] = ".csv")
2. 添加自定义列加载文件内容
现在要让Power Query读取每个文件的内容:
- 点击「添加列」>「自定义列」
- 在公式框里输入对应文件类型的加载公式:
- 对于CSV文件:
Table.FromRecords(Csv.Document(File.Contents([Folder Path]&[Name]))) - 对于制表符分隔的TXT文件:
Table.FromRecords(Csv.Document(File.Contents([Folder Path]&[Name]), [Delimiter="\t"]))
注:如果你的TXT是其他分隔符(比如逗号、分号),把
Delimiter的值改成对应的符号即可 - 对于CSV文件:
- 点击「确定」后,会新增一列包含每个文件内容的表格
3. 展开文件内容列
把所有文件的内容合并到一个表格里:
- 点击新增加的「自定义列」右侧的展开按钮(就是那个带箭头的图标)
- 如果所有文件的表头结构一致,直接选择「展开到新行」或者勾选所有列名展开;如果结构不一致,可以选择「仅创建加载」后再处理表头合并
4. 整理最终数据
最后做一些收尾清理:
- 移除不需要的元数据列(比如文件名、路径、修改时间等)
- 调整各列的数据类型(比如把数字列改成数值类型,日期列改成日期类型)
- 如果每个文件都自带表头,可能需要移除重复的表头行(可以通过筛选「列1」不等于表头文本实现)
完整M代码示例(CSV文件)
这里给你一个可直接参考的完整M代码模板,替换成你的文件夹路径即可:
let // 替换成你的目标文件夹路径 Source = Folder.Files("C:\你的文件夹路径"), // 筛选CSV文件 FilteredFiles = Table.SelectRows(Source, each [Extension] = ".csv"), // 加载每个文件的内容 AddedFileContent = Table.AddColumn(FilteredFiles, "文件内容", each Table.FromRecords(Csv.Document(File.Contents([Folder Path]&[Name])))), // 展开内容列(这里的列名要和你的文件表头对应) ExpandedContent = Table.ExpandTableColumn(AddedFileContent, "文件内容", {"姓名", "年龄", "城市"}, {"姓名", "年龄", "城市"}), // 移除无关的元数据列 CleanedTable = Table.RemoveColumns(ExpandedContent,{"Name", "Extension", "Date accessed", "Date modified", "Date created", "Attributes", "Folder Path", "File Size"}) in CleanedTable
关于Excel操作不适用的说明
你提到Excel里的操作似乎无法适用,大概率是之前误选了「从CSV/TXT」而不是「从文件夹」——其实Excel和Power BI的Power Query操作逻辑是完全一致的,按照上面的步骤在Excel里重新操作一遍应该就能解决问题。
内容的提问来源于stack exchange,提问作者dmytro
相关产品推荐
相关产品推荐

