打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
VBA学习笔记(四):VBA操作文本文件对比(FileSystemObject和OpenText)

通过本人对一下两种VBA文本处理方法效率的比较发现:使用OpenText方式读取文本文件的效率略高于FileSystemObject方式读取文本文件。

实验环境:

1)Excel2013 64bit。

2)Win7 64bit / SSD硬盘 / i7-4900MQ cpu @ 2.80GHz / 16G内存。

3)读取1.08G文本文件。

实验结果:

FileToOpenTxt方法耗时30.81s

FileSsytemObject方法耗时36.69s.

方法一的效率比方法二高19.08%左右。

样本链接:

https://files.cnblogs.com/files/metree/VBA%E6%96%87%E6%9C%AC%E8%AF%BB%E5%8F%96%E6%95%88%E7%8E%87%E6%B5%8B%E8%AF%95V1.0.xlsm.zip

程序界面:

 

一、使用FileToOpenTxt方式读取文本文件,参考代码如下

Sub OpenTxtInput()
    
    '选择文件,可以同时选择多个
    FileToOpenTxt = Application.GetOpenFilename('文本文档(*.txt;*.FMT),*.txt;*.FMT', 1, '请选择文件', , True)
    
    '如果未选择任何文件,则退出
    If Not IsArray(FileToOpenTxt) Then
        MsgBox '未选择任何文件!'
        Exit Sub
    End If
    
    '开始计时
    Begin = Timer
 
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
i = 0
    '逐行读取文件内容
    For Files_Txt = LBound(FileToOpenTxt) To UBound(FileToOpenTxt)
        Open FileToOpenTxt(Files_Txt) For Input As #1
            Do Until EOF(1)
                Line Input #1, SourceLine
                LineContent = SourceLine
                'LineContent = Split(SourceLine, Chr(44), -1)                
                i = i + 1  '记录读取文件的总行数
            Loop
        Close #1
    Next
    
    Over = Timer
    
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
    
    MsgBox ('已运行完成!FileOpenTxt共运行' & Over - Begin & 's。' & '  ' & i)

End Sub

二、使用FileSystemObject方式读取文本文件,参考代码如下:

Sub FileSystemObjectTxtInput()

    Dim FileToOpenCsv
    Dim Begin
    Dim Over
    Dim fso_SeqCsv
    
    FileToOpenCsv = Application.GetOpenFilename('TXT文档(*.*),*.*', 1, '请选择需要导入的txt文件', , True)
    
    If Not IsArray(FileToOpenCsv) Then
        MsgBox '未选择任何文件!'
        Exit Sub
    End If    

    '开始计时
    Begin = Timer
    
    Const ForReading = 1
    Const ForWriting = 2
    Const ForAppending = 8
    i = 0
    
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    
    Set fso_SeqCsv = CreateObject('Scripting.FileSystemObject')
    
    For i_FilesNumCsv = LBound(FileToOpenCsv) To UBound(FileToOpenCsv)
        
        Set SeqCsvFiles = fso_SeqCsv.OpenTextFile(FileToOpenCsv(i_FilesNumCsv), ForReading, True, TristateTrue)
        
        Do While Not SeqCsvFiles.AtEndOfLine            
            SeqAlarm_Line = SeqCsvFiles.ReadLine
            pmSglAlarmAll = SeqAlarm_Line
            'pmSglAlarmAll = Split(SeqAlarm_Line, Chr(44), -1)            
            i = i + 1  '记录读取文件的总行数     
        Loop
    Next    
 
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
    
    Over = Timer

    MsgBox ('已运行完成!FileSystemObject共运行' & Over - Begin & 's。' & '  ' & i)

End Sub
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Excel VBA 将数据导出为文档文件,操作太繁琐,仅需鼠标双击即可
可以从后到前阅读一个文本文件吗?
VBA文件及文件夹操作
VBA编程问答(第3辑)
用vbs读取文本文件的最后一行_vbs_脚本之家
VBA使用FileSystemObject将读取或写入文本文件(三) — Windows Live
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服