当前位置: 首页 > news >正文

VBA使用fso对象合并指定路径的txt文件(含子目录)


图(1)

        前几天我跟大家分享了在VBA中如何获取指定类型文件的路径的方法,其中最重要的一个思路就是在处理完当前目录的文件后,再调用程序自身来对子目录进行处理,以此来实现对子目录的无限循环,直至所有文件都处理完毕为止。按照此设计思路,今天我来跟大家分享VBA如何合并指定路径的txt文件。

        为方便程序调用,我们将合并过程命名为MergeTxtFile,它携带两个参数,一个是filePath表示指定路径,另一个是fileName表示合并后的文件名,因为处理过程是循环进行的,且涉及合并文件和公共变量的清理问题,循环过程只能单独设计为子过程MergeTxt,代码如下:

Public txtFile As String, fileCount As Integer, filesList As String

Sub MergeTxtFile(filePath As String, fileName As String)
'
' 合并指定路径的txt文件(含子目录)
'
' 参数说明:filePath 表示指定路径,fileName 表示合并后的文件名

    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    If Not fso.folderExists(filePath) Then
        MsgBox "找不到路径:" & vbCrLf & filePath, vbOKOnly + vbExclamation, "错误"
        Exit Sub
    End If
    
    txtFile = filePath & "\" & fileName
    
    If fso.fileExists(txtFile) Then
        Kill txtFile
        If Err.Number <> 0 Then   ' 错误检查
            Err.Clear   ' 清除错误
            MsgBox "以下文件已打开,请先关闭。" & vbCrLf & txtFile, vbOKOnly + vbExclamation, "错误"
            Exit Sub
        End If
    End If
    
    ' 合并文件
    Call MergeTxt(filePath, fileName)
    Debug.Print filesList & vbCrLf & "执行完毕!总共合并" & fileCount & "个" & "txt文件"

    '清理公共变量
    txtFile = ""
    fileCount = 0
    filesList = ""
End Sub

Sub MergeTxt(filePath As String, fileName As String)
'
' 合并指定路径的txt文件(含子目录)
'
    Dim file As Object
    Dim fileContent As String
    Dim fileNum As Integer
    'Dim fileCount As Integer
    Dim txtFolder As Object
    Dim txtNum As Integer
    
    txtNum = FreeFile                     ' 获取新文件号
    Open txtFile For Append As #txtNum    ' 打开合并文件(追加模式)
    
    '遍历主目录的每个文件
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set txtFolder = fso.GetFolder(filePath)
    For Each file In txtFolder.Files
        If LCase(fso.GetExtensionName(file.path)) = "txt" Then
        
            ' 获取文件列表
            If file.Name <> fileName Then
                If Len(filesList) = 0 Then
                    filesList = file.path
                Else
                    filesList = filesList & vbCrLf & file.path
                End If
                fileCount = fileCount + 1    ' 计算文件个数

                fileNum = FreeFile                      ' 获取新文件号
                Open file.path For Input As #fileNum    ' 打开当前文件

                ' 将读取内容写入合并文件
                Do While Not EOF(fileNum)               ' 检测文件末尾
                    Line Input #fileNum, fileContent    ' 采用逐行读取的方式
                    Print #txtNum, fileContent
                Loop
                
                Close #fileNum    ' 关闭当前文件
            End If
        End If
    Next file
    
    Close #txtNum    ' 关闭合并文件

    ' 遍历子目录
    For Each subfolder In txtFolder.subFolders
        Call MergeTxt(subfolder.path, fileName)    ' 调用程序自身处理子目录
    Next subfolder

End Sub

        以上是通用过程,在使用过程中,我们只需要重新定义变量filePath和fileName的值即可,下面是使用的演示代码:

Sub Demo_MergeTxtFile()
'
' 演示MergeTxtFile函数用法
'
    Dim filePath As String
    Dim fileName As String
    
    filePath = "D:\Users\Hero\Desktop\办公室"
    fileName = "合并TXT.txt"
    
    Call MergeTxtFile(filePath, fileName)
    
End Sub

        执行结果如下图:


图(2)

http://www.dtcms.com/a/58606.html

相关文章:

  • Android Glide 的显示与回调模块原理源码级深度剖析
  • 前端需要在大模型项目中具备的知识
  • Cython编译去掉符号表
  • VBA 复制指定次数的List
  • 最小生成树--Kruskal
  • 清华与人大最新研究表明:AGI的到来时间需70年与10^26个参数,好像不用那么急了...
  • 【计算机组成原理】第一章 计算机系统概述
  • 【The Rap of China】2018
  • 数据结构--【栈与队列】笔记
  • 2020CVPR-SiamBAN:用于视觉跟踪的Siamese框自适应网络
  • 【已解决】AttributeError: module ‘numpy‘ has no attribute ‘object‘.
  • Unity Shader学习总结
  • Linux安装升级docker
  • 指针的工作原理,函数的传值和传址
  • 第6届传智杯复赛第一场
  • 代码随想录算法训练营第三十二天(20250228) |509. 斐波那契数,70. 爬楼梯,746. 使用最小花费爬楼梯 -[补卡20250309]
  • ES Module 的 import 导入和 import () 动态导入
  • Blueprint —— Blueprint Editor(二)
  • 牛客周赛A:84:JAVA
  • 【移动WEB开发】rem适配布局
  • 【Kotlin】Kotlin基础笔记
  • 用python 的 sentiment intensity analyzer的情感分析器,将用户评论进行分类
  • HPC超算系列4——官方指南文档
  • Dify使用日常:我是如何按标题级别将word中的内容转存到excel中的
  • ESP32驱动OV3660摄像头实现EdgeImpulse图像识别(摄像头支持红外夜视、边缘AI计算)
  • 【AI】什么是Embedding向量模型?我们应该如何选择?
  • 论文不能抄要怎么写啊?
  • 网络空间安全(21)验证码安全
  • 【springcloud】快速搭建一套分布式服务springcloudalibaba(二)
  • 【机器学习和深度学习】分类问题通用评价指标:精确率、召回率、准确率和混淆矩阵