使用来自不同文本文件

时间:2016-04-26 07:55:57

标签: excel excel-vba vba

我需要帮助创建一个脚本,该脚本使用来自其他文本文件的内容创建新文本文件,并考虑列中的值。 我在列A中填充了10个名称,列B填充了1到3之间的数字,以及包含10个文本文件的文件夹,这些文件具有数字作为名称(从1到10)。 我需要为A列中的每个名称创建一个文本文件,该文件文件将B列中的值与文本文件中的文本一起考虑。 文本文件内容包含3个不同的行:

1content1

2content2

3content3

对于第一个名称,如果b列中相同行的值为1,则新创建的文本文件只需要包含第一个文本文件的第一行(1):“1content1”,依此类推。

这可能吗?我该怎么做呢谢谢!

1 个答案:

答案 0 :(得分:0)

我假设您的数据如下图所示。

enter image description here

下面,

  1. A包含要创建的文件名
  2. B的行号范围为1到3
  3. 很少有事情需要考虑:

    • 正如您所说的,在名称为1到10的文件夹中已经有10个文本文件,我正在为数据中的每一行选择这些文件。例如,第1行将按名称File_A创建一个新文件,其中数据为行号。指定文件夹中名为1.txt的文件中的1个。然后对于第2行,将创建名为File_B的新文件,其中数据将为行号。名称为2.txt的文件中的2个,依此类推。(我想这很清楚)
    • 代码会将新创建的文件保存在已保存10个文件的同一文件夹中。


    Sub CreateTextFile()
        Dim hf As Integer: hf = FreeFile
        Dim lines() As String
        Dim i As Long, LastRow As Long, FileLine As Long, LineNum As Long, lineCntr As Long
        Dim FileName As String, FilePath As String
        Dim ws As Worksheet
        Dim fso As Object, oFile As Object
        Set fso = CreateObject("Scripting.FileSystemObject")
    
        Set ws = ThisWorkbook.Worksheets("Sheet1")    '---->change Sheet1 to your worksheet name
        FilePath = "C:\test_folder\"        '---->change filepath as required
        LastRow = Cells(Rows.Count, "A").End(xlUp).Row
    
        For i = 1 To LastRow
            FileName = FilePath & i & ".txt"
            LineNum = ws.Cells(i, 2).Value      
    
            'reading text file line by line
            Open FileName For Input As #hf
                lines = Split(Input$(LOF(hf), #hf), vbNewLine)
            Close #hf
    
            'writing particular line to new text file
            For lineCntr = 0 To UBound(lines)
                If lineCntr + 1 = LineNum Then
                    Set oFile = fso.CreateTextFile(FilePath & ws.Cells(i, 1) & ".txt")
                    oFile.WriteLine lines(lineCntr)
                    oFile.Close
                End If
            Next lineCntr
        Next i
        Set fso = Nothing
        Set oFile = Nothing
    End Sub
    

    如果有什么不清楚,请告诉我。