如何将批量TXT文件导入单个Excel文档?含空格分隔数据场景
嘿,这两个需求都是日常办公里常见的批量处理场景,我给你整理了两种不同思路的实现方法,不管你喜欢用可视化操作还是代码自动化,都能搞定:
一、将多个文本文件导入单个Excel文档(每个文件对应独立工作表)
方法1:用Excel内置「获取数据」功能(无需代码,新手友好)
操作步骤非常直观:
- 打开一个空白Excel工作簿,切换到「数据」选项卡
- 点击「获取数据」→「自文件」→「自文件夹」,选择存放所有文本文件的文件夹后点击「确定」
- 在弹出的「文件夹」预览窗口里,直接点击「转换数据」进入Power Query编辑器
- 编辑器里,点击「添加列」→「自定义列」,输入公式
=Excel.Workbook([Content])后点击「确定」 - 点击新生成的「自定义」列右侧的展开箭头(两个小箭头图标),选择「仅加载数据」,再点击「确定」
- 最后点击「关闭并上载」,所有文本文件就会自动生成对应的独立工作表了
方法2:用VBA脚本批量导入(适合重复自动化场景)
如果需要频繁做这个操作,用VBA效率更高:
Sub 批量导入文本文件到多工作表() Dim 文件夹路径 As String, 文件名 As String Dim 目标工作簿 As Workbook, 新工作表 As Worksheet Set 目标工作簿 = ThisWorkbook 文件夹路径 = Application.GetOpenFilename("选择存放文本的文件夹", , , , True) If 文件夹路径 = "False" Then Exit Sub 文件名 = Dir(文件夹路径 & "\*.txt") Do While 文件名 <> "" ' 创建新工作表并命名 Set 新工作表 = 目标工作簿.Sheets.Add(After:=目标工作簿.Sheets(目标工作簿.Sheets.Count)) 新工作表.Name = Replace(文件名, ".txt", "") ' 用文件名作为表名,注意避免重复或非法字符 ' 导入文本文件内容 With 新工作表.QueryTables.Add( _ Connection:="TEXT;" & 文件夹路径 & "\" & 文件名, _ Destination:=新工作表.Range("A1")) .TextFileParseType = xlDelimited .TextFileSpaceDelimiter = False ' 默认非空格分隔,按需调整 .Refresh BackgroundQuery:=False End With 文件名 = Dir Loop MsgBox "所有文件导入完成!" End Sub
使用方式:
- 按
Alt+F11打开VBA编辑器 - 右键点击当前工作簿→「插入」→「模块」,粘贴上述代码
- 点击运行按钮,选择目标文件夹即可
二、将500个空格分隔的TXT文件导入单个工作表
方法1:用Power Query批量合并(推荐,无需代码)
Power Query处理这类批量合并特别顺手:
- 打开空白Excel工作簿,点击「数据」→「获取数据」→「自文件」→「自文件夹」,选择目标文件夹后点击「确定」
- 点击预览窗口顶部的「合并文件」按钮,选择任意一个TXT文件作为样本,点击「确定」
- 在弹出的「合并文件」设置窗口里,选择「分隔符」为「空格」,确认数据类型后点击「确定」
- 最后点击「关闭并上载」,所有文件的数据就会自动合并到单个工作表里了
方法2:用VBA脚本高效合并(适合大文件批量处理)
如果文件总数多、数据量大,VBA的运行速度会更快:
Sub 批量合并空格分隔TXT到单工作表() Dim 文件夹路径 As String, 文件名 As String Dim 目标工作表 As Worksheet, 行号 As Long Dim 文件号 As Integer, 文本行 As String, 数据数组 As Variant Set 目标工作表 = ThisWorkbook.Sheets(1) ' 默认用第一个工作表作为目标 行号 = 1 ' 数据起始行 文件夹路径 = Application.GetOpenFilename("选择存放TXT的文件夹", , , , True) If 文件夹路径 = "False" Then Exit Sub ' 先写入第一个文件的表头(如果所有文件表头一致,只写一次) 文件名 = Dir(文件夹路径 & "\*.txt") 文件号 = FreeFile Open 文件夹路径 & "\" & 文件名 For Input As #文件号 Line Input #文件号, 文本行 数据数组 = Split(文本行, " ") 目标工作表.Range("A" & 行号).Resize(1, UBound(数据数组) + 1) = 数据数组 行号 = 行号 + 1 Close #文件号 ' 遍历所有文件,导入数据(跳过表头) Do While 文件名 <> "" 文件号 = FreeFile Open 文件夹路径 & "\" & 文件名 For Input As #文件号 Line Input #文件号, 文本行 ' 跳过第一行表头(无表头则删除此行) Do While Not EOF(文件号) Line Input #文件号, 文本行 数据数组 = Split(文本行, " ") 目标工作表.Range("A" & 行号).Resize(1, UBound(数据数组) + 1) = 数据数组 行号 = 行号 + 1 Loop Close #文件号 文件名 = Dir Loop MsgBox "全部文件合并完成!共导入 " & 行号 - 2 & " 行数据。" End Sub
使用方式和之前的VBA方法一致,注意如果你的TXT文件没有表头,记得删掉代码里跳过表头的那行Line Input #文件号, 文本行。
内容的提问来源于stack exchange,提问作者ITwarriorCA
相关产品推荐
相关产品推荐

