VBA 读取文本文件

本文介绍了如何使用VBA来读取文本文件,特别是MAP文件。通过创建Collection集合类来存储读取的数据,然后一次性将数据写入Excel表格,减少系统资源的占用。这个方法适用于需要高效处理大量文本数据的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

         Excel在我们的日常办公中,用到非常多。因此,对于它的脚本VBA的使用,难免也比较频繁。在此总结、整理下之前写过的一段VBA读取MAP文件,统计ECU存储空间使用情况的部分代码。

该段程序,先使用Collection集合类装载读取的数据,最后统一写入将数据按照期望的格式,写入Excle表格中。这样一次性读取、写入,可以避免多次在读MAP文件和写Excel文件之间切换,增加系统资源开销。

    Open ThisWorkbook.Path & "\XXX.MAP" For Input As #1
      
    lineNum = 0
    FundStrtLineNum = 0
    bFoundStart = False
    '读取TXT文件
    Do While Not EOF(1)
        lineNum = lineNum + 1
        Line Input #1, txt
        If txt = "Memory map:" Then
            FundStrtLineNum = lineNum
            bFoundStart = True
        End If
        If bFoundStart Then
            If lineNum >= (FundStrtLineNum + 3) And lineNum <= (FundStrtLineNum + 35) Then
               txt
### 如何使用 VBA 和 ADODB.Stream 实现逐行读取文本文件 通过 `ADODB.Stream` 对象可以实现高效地读取和写入文件的功能。以下是基于所提供的引用内容以及专业知识,展示如何使用 VBA 和 `ADODB.Stream` 来逐行读取文本文件。 #### 示例代码及解析 ```vba Sub ReadTextFileLineByLine(filePath As String, Optional charset As String = "utf-8") Dim streamObj As Object Set streamObj = CreateObject("ADODB.Stream") ' 打开 Stream 对象并设置属性 With streamObj .Type = 2 ' 设置为文本流模式 .Mode = 3 ' 可读可写模式 If Len(charset) > 0 Then .Charset = charset ' 指定字符集编码,默认 utf-8 End If .Open ' 打开源文件 .LoadFromFile filePath ' 加载目标文件到内存中 End With ' 初始化变量用于存储每一行的内容 Dim lineContent As String Do While Not streamObj.EOS ' EOS 表示是否到达流的末尾 lineContent = streamObj.ReadText(-2) ' -2 参数表示读取至下一行结束符前的位置 Debug.Print lineContent ' 将每行内容打印到立即窗口(Immediate Window) ' 如果需要进一步处理当前行数据,则在此处添加逻辑 ' 移动指针到下一行起始位置 streamObj.SkipLine Loop ' 关闭资源释放对象 streamObj.Close Set streamObj = Nothing End Sub ``` --- #### 解析 1. **创建 `ADODB.Stream` 对象** 创建一个 `ADODB.Stream` 对象实例化后赋给变量 `streamObj`[^1]。 2. **配置对象属性** 配置 `.Type` 属性为 `2`,代表以文本方式操作;`.Mode` 设为 `3`,即允许读写访问[^2]。如果需要支持特定编码格式,可以通过 `.Charset` 属性指定编码类型,例如 UTF-8 或 GBK 编码[^3]。 3. **加载文件** 调用方法 `.LoadFromFile` 将外部文件的数据加载到该流对象内部缓冲区中[^4]。 4. **逐行读取** 利用循环结构配合条件判断语句检测是否已达到文件结尾 (`EOS`)。每次调用 `.ReadText(-2)` 方法获取从当前位置直到下一个换行符之间的全部字符作为单独的一行输出。之后执行 `.SkipLine` 命令跳转到下一新行起点继续迭代过程直至完成整个文档扫描工作为止。 5. **清理与关闭** 完成所有操作以后记得及时调用 `.Close` 方法释放占用资源,并销毁对象本身以便程序能够正常退出运行状态。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值