简体   繁体   English

VBA 打开资源管理器对话框,select txt 文件,并添加一个 header 即没有文件路径的文件名

[英]VBA to open Explorer dialogue, select txt file, and add a header that is the filename without file path

I have 100's of text files named correctly, but I need the name of the text file added into the first row (thus shifting the existing data down to the second row) with " on either side of the name.我有 100 个正确命名的文本文件,但我需要将文本文件的名称添加到第一行(从而将现有数据向下移动到第二行),名称的两边都有“。

The text files are over multiple folders, so I need to be able to open an explorer dialogue first to select multiple text files and add the new header row to every one.文本文件位于多个文件夹中,因此我需要能够首先打开一个资源管理器对话框来访问 select 多个文本文件,然后将新的 header 行添加到每个文件中。

Any help would be hugely appreciated as I cannot find the answer anywhere on google!任何帮助将不胜感激,因为我无法在谷歌的任何地方找到答案!

Tom汤姆

My attempt, but doesnt really work becaue 1. I have to set the directory, and 2. I need to have the filename with " either side, for example "Line1":我的尝试,但并没有真正奏效,因为 1. 我必须设置目录,以及 2. 我需要文件名的两边都带有 ",例如“Line1”:

Sub ChangeRlnName()

    'the final string to print in the text file
    Dim strData As String
    'each line in the original text file
    Dim strLine As String
    Dim time_date As String
    Set FSO = CreateObject("Scripting.FileSystemObject")
    
    'Get File Name
    Filename = FSO.GetFileName("C:\Users\eflsensurv\Desktop\Tom\1.txt")
    
    'Get File Name no Extension
    FileNameWOExt = Left(Filename, InStr(Filename, ".") - 1)
    
    strData = ""
    time_date = Format(Date, "yyyymmdd")
    'open the original text file to read the lines
    Open "C:\Users\eflsensurv\Desktop\Tom\1.txt" For Input As #1
    'continue until the end of the file
    
    
    While EOF(1) = False
    'read the current line of text
    Line Input #1, strLine
    'add the current line to strData
    strData = strData + strLine & vbCrLf
    Wend
    
    'add the new line
    strData = FileNameWOExt + vbLf + strData
    Close #1
    'reopen the file for output
    Open "C:\Users\eflsensurv\Desktop\Tom\1.txt" For Output As #1
    Print #1, strData
    Close #1

End Sub

Try something like this:尝试这样的事情:

Sub Tester()
    Dim colFiles As Collection, f
    
    'get all txt files under specified folder
    Set colFiles = GetMatches("C:\Temp\SO", "*.txt")
    
    'loop files and add the filename as a header
    For Each f In colFiles
        AddFilenameHeader CStr(f)
    Next f
End Sub


Sub AddFilenameHeader(fpath As String)
    Dim base, content
    With CreateObject("scripting.filesystemobject")
        base = .GetBaseName(fpath) 'no extension
        
        With .OpenTextFile(fpath, 1)
            'get any existing content
            If Not .AtEndOfStream Then content = .readall()
            .Close
        End With
        DoEvents
        'overwrite existing content with header and previous content
        .OpenTextFile(fpath, 2, True).write """" & base & """" & vbCrLf & content
    End With
End Sub

'Return a collection of file paths given a starting folder and a file pattern
'  e.g. "*.txt"
'Pass False for last parameter if don't want to check subfolders
Function GetMatches(startFolder As String, filePattern As String, _
                    Optional subFolders As Boolean = True) As Collection

    Dim fso, fldr, f, subFldr, fpath
    Dim colFiles As New Collection
    Dim colSub As New Collection
    
    Set fso = CreateObject("scripting.filesystemobject")
    colSub.Add startFolder
    
    Do While colSub.Count > 0
        
        Set fldr = fso.getfolder(colSub(1))
        colSub.Remove 1
        
        If subFolders Then
            For Each subFldr In fldr.subFolders
                colSub.Add subFldr.Path
            Next subFldr
        End If
        
        fpath = fldr.Path
        If Right(fpath, 1) <> "\" Then fpath = fpath & "\"
        f = Dir(fpath & filePattern) 'Dir is faster...
        Do While Len(f) > 0
            colFiles.Add fpath & f
            f = Dir()
        Loop
    Loop
    Set GetMatches = colFiles
End Function

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM