在VBA中逐行读取/解析文本文件

时间:2012-07-17 18:33:55

标签: excel vba excel-vba

我正在尝试使用VBA解析文本文档并返回文本文件中给出的路径 例如,文本文件如下所示:

*Blah blah instructions
*Blah blah instructions on line 2
G:\\Folder\...\data.xls
D:\\AnotherFolder\...\moredata.xls

我希望VBA一次加载1行,如果它以*开头,则移动到下一行(类似于被注释的行)。对于带有文件路径的行,我想将该路径写入单元格,对于第一条路径说A2,为下一条路径说B2,等等。

我希望回答的主要内容是:
1.使用VBA读取文本文件的最佳/简单方法是什么? 2.我怎么能逐行完成呢?

5 个答案:

答案 0 :(得分:66)

对于文本文件的最基本读取,请使用open

示例:

Dim FileNum As Integer
Dim DataLine As String

FileNum = FreeFile()
Open "Filename" For Input As #FileNum

While Not EOF(FileNum)
    Line Input #FileNum, DataLine ' read in data 1 line at a time
    ' decide what to do with dataline, 
    ' depending on what processing you need to do for each case
Wend

答案 1 :(得分:34)

我发现带有TxtStream的FileSystemObject是读取文件的最简单方法

Dim fso As FileSystemObject: Set fso = New FileSystemObject
Set txtStream = fso.OpenTextFile(filePath, ForReading, False)

然后使用这个txtStream对象,您可以使用各种智能感知工具(与使用FreeFile()方法不同),因此可以减少猜测。另外,你不必分配一个FreeFile,并希望它自你分配以来它实际上仍然是免费的。

您可以阅读如下文件:

Do While Not txtStream.AtEndOfStream
    txtStream.ReadLine
Loop
txtStream.Close

注意:这需要引用Microsoft Scripting Runtime。

答案 2 :(得分:30)

为了完整;使用加载到内存中的数据;

dim hf As integer: hf = freefile
dim lines() as string, i as long

open "c:\bla\bla.bla" for input as #hf
    lines = Split(input$(LOF(hf), #hf), vbnewline)
close #hf

for i = 0 to ubound(lines)
    debug.? "Line"; i; "="; lines(i)
next

答案 3 :(得分:2)

您可以使用此代码在文本文件中逐行阅读,您还可以检查第一个字符是否为“*”,然后您可以将其保留..

Public Sub Test()

    Dim ReadData as String

    Open "C:\satheesh\myfile\file.txt" For Input As #1

    Do Until EOF(1) 
       Line Input #1, ReadData 'Adding Line to read the whole line, not only first 128 positions
    If Not Left(ReadData, 1) = "*" then
       '' you can write the variable ReadData into the database or file
    End If 

    Loop

    Close #1

End Sub

答案 4 :(得分:-1)

以下是我从阅读文本文件到Excel文件的代码。enter image description here