VBA读取txt文档指定行与列的值

例如,我们可以使用下面的 VBA 代码来读取 txt 文档中第 13 行第 5 列的值,假设值的位置从第64个字符开始,长度为46个字符,数组分割符采用空格。

方法一:使用Open For Input as 语句直接读取

Open pathname For [Input |Output |Append] As [#]filenumber [Len = buffersize]

Sub ReadtxtFile()
'
' 使用Open For Input as 语句直接读取

    Dim lineIndex, columnIndex As Integer
    lineIndex = 13
    columnIndex = 5

    Dim FilePath As String
    Dim AnsiFilePath As String
    FilePath = "C:\path\to\your\file.txt"    ' 设置要读取的文本文件路径
    If UTF8TOANSI(FilePath) = False Then Exit Sub    ' 将TXT编码UTF8转换为ANSI
    AnsiFilePath = Left(FilePath, Len(FilePath) - 4) & "_ANSI.txt"

    ' 打开文本文件并逐行读取内容
    Open AnsiFilePath For Input As #1
        Dim lineNumber As Integer
        lineNumber = 0
        Do Until EOF(1)
            lineNumber = lineNumber + 1
            Line Input #1, textLine
            If lineNumber = lineIndex Then
                Value = Replace(Mid$(textLine, 64, 46), " ", "")    '从第64个字符开始截取46个字符
                Debug.Print Value    ' 在视图立即窗口中显示变量值
                Exit Do
            End If
        Loop
    Close #1
    Set fso = CreateObject("scripting.filesystemobject")
    fso.DeleteFile (AnsiFilePath)    ' 删除临时文件
End Sub

方法二:使用Open For Input as 语句+数组方式读取

Sub ReadtxtFile()
'
' 使用Open For Input as 语句+数组方式读取

    Dim lineIndex, columnIndex As Integer
    lineIndex = 13
    columnIndex = 5

    Dim filePath As String
    filePath = "C:\path\to\your\file.txt"    ' 设置要读取的文本文件路径

    ' 打开文本文件并逐行读取内容
    Open filePath For Input As #1

        Dim lineNumber As Integer
        lineNumber = 0
        Do Until EOF(1)
            lineNumber = lineNumber + 1
            Line Input #1, textLine
            If lineNumber = lineIndex Then
                '用 for Next循环将其他分隔符替换成空格
                DelimiterNew = " "
                For Each DelimiterOld In Array(";", "  ", "<==", ":", vbCr)
                    textLine = Replace(textLine, DelimiterOld, DelimiterNew)    '将不同分隔符替换成空格
                    textLine = Replace(textLine, "  ", DelimiterNew)    '将两个空格替换成一个空格
                Next DelimiterOld

                'fieldsArray = Split(textLine, vbTab)    ' 将每行按制表符分割为字段数组
                fieldsArray = Split(textLine, " ")    ' 将每行按空格分割为字段数组

                value = fieldsArray(columnIndex-1)    ' 获取指定列的值(列数要减1)
                
                ' 输出结果到 Immediate Window (Ctrl + G)
                Debug.Print value    '在视图-立即窗口中显示变量值
                
                Exit Do
            End If
        Loop
    Close #1
End Sub

方法三:使用CreateObject函数+数组方式读取

语法  CreateObject(class,[servername])

Sub ReadtxtFile()
'
' 使用CreateObject函数+数组方式读取

    Dim lineIndex, columnIndex As Integer
    lineIndex = 13
    columnIndex = 5
    
    Dim filePath As String
    filePath = "C:\path\to\your\file.txt"    ' 设置要读取的文本文件路径
    
    Set fso = CreateObject("scripting.filesystemobject")
    Dim txtFile As Object, textContent As String
    Set txtFile = fso.OpenTextFile(filePath, 1)

    Dim lineNumber As Integer
    lineNumber = 0
    
    Do While Not txtFile.AtEndOfStream
        lineNumber = lineNumber + 1
        textContent = txtFile.readline
        
        If lineNumber = lineIndex Then
            ' 用 for 循环将其他分隔符替换成空格
            DelimiterNew = " "
            For Each DelimiterOld In Array(";", "  ", "<==", ":", vbCr)
                  textContent = Replace(textContent, DelimiterOld, DelimiterNew)    ' 将不同分隔符替换成空格
                  textContent = Replace(textContent, "  ", DelimiterNew)    ' 将两个空格替换成一个空格
            Next DelimiterOld
            
            'fieldsArray = Split(textLine, vbTab)    ' 将每行按制表符分割为字段数组
            fieldsArray = Split(textContent, " ")     ' 将每行按空格分割为字段数组
            
            Value = fieldsArray(columnIndex - 1)  ' 获取指定列的值(列数要减1)

            ' 输出结果到 Immediate Window (Ctrl + G)
            Debug.Print value    '在视图-立即窗口中显示变量值

            Exit Do
        End If
    Loop
    
    txtFile.Close
    Set fso = Nothing
    Set txtFile = Nothing
End Sub

注意事项:

需要将 filePath 变量修改为你自己的 txt 文件路径,lineIndex, columnIndex变量修改为你自己的行与列。

总结:

采用方法一直接读取txt文档时,为避免出现乱码,我们需要使用UTF8TOANSI函数将UTF-8编码转换为ANSI,处理起来相对复杂一些,但方法二或方法三采用数组方式读取,则无需转换编码,处理起来相对简单。关于UTF8TOANSI函数,请参考《VBA转换TXT文档编码(UTF-8转换为ANSI)》一文。

  • 9
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TOMaster.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值