1.需求场景
小伙伴们工作中时常遇到处理文本文件的情况。有些业务系统中的数据记录、日志文件、格式化输出的数据等是以txt文本文件的方式记录的。但是在进行数据处理和分析时,如果需要处理大量的文本文件、或对文本文件中特定的字段、数据等进行处理,会显得繁琐而棘手。如果能够导入到excel文件中,就可以发挥Excel进行数据统计分析功能的优势。
2.解决思路
一般此类文本文件的格式比较规范,数据按行存储,字段排列顺序一致、格式相同。可以使用VBA文件对象访问文本文件,打开文件之后,逐行读入文本,每行当做一个字符串;获取字符串之后再根据行数据各字段之间以tab分隔的特点,以tab为标记将字符串拆分为多个子串;每个子串保存在一个变量中,此处以字符串数组方式处理。到表格中,再把字符串变量逐一写入单元格中。循环处理各行数据,即实现了将txt文件导入excel的效果。灵活处理变量,简单添加逻辑代码,还可以实现对原始数据的剔除、选择、变更字段顺序等简单的处理,在文件内容导入的过程中,实现批量预处理,使导入后的数据更符合自己对数据处理的需求。
3.VBA实现
Dim wb As Workbook
Dim ws As Worksheet
Dim openFile
'文本文件内容读入表格
Public Sub 文本文件内容读入表格()
'定义变量
Dim txt As String
Dim str_txt() As String
Dim sub_str() As String
Dim i, j, k, Line, endLine As Integer
'设置起始和结尾行号,即读取范围
Line = 1
endLine = 4
'设置读取文件
openFile = "D:\Temp\12-1(ANSI).txt"
'打开文件
Open openFile For Input As #1
'设置工作簿和工作表变量
Set wb = Workbooks(1)
Set ws = Worksheets("导入文件")
'激活工作表
ws.Activate
'清空工作表原有内容
ws.UsedRange.Value = ""
'循环按行读取原始txt文件数据
Do While Line <= endLine
Line Input #1, txt
'按tab键分隔数据
str_txt = Split(txt, vbTab)
'分隔过的数据填入表格一行各列中
For i = 0 To UBound(str_txt)
ws.Cells(Line, i + 1).Value = str_txt(i)
Next i
Line = Line + 1
Loop
'关闭文件
Close #1
'释放工作簿和工作表变量
Set ws = Nothing
Set wb = Nothing
'显示提示信息
MsgBox "文本文件导入完成。"
End Sub
4.运行效果
需要注意的是:因为文本文件中含有中文字符,所以文件编码格式应为ANSI格式,如果UTF-8编码格式,导入后会出现乱码的格式,需要对文件编码进行处理。逻辑稍显复杂,本着一次学一个小技巧,学会不学废的原则,本次范例假定在ANSI格式文本文件的前提下。 UTF-8编码等问题留待后续探讨。
再和前面向大家介绍过的批量提取文件目录等内容综合运用,即可实现对文本文件的批量处理。
如果感觉本篇有帮助的话,欢迎点赞、回复或关注。
【点赞富三代,分享美一生】