Excel 使用VBScript从TXT格式文件填充现有XLSX

Excel 使用VBScript从TXT格式文件填充现有XLSX,excel,vbscript,Excel,Vbscript,我需要从六个TXT格式文件中填充一个现有的XLSX格式文件 在XLSX格式文件中,有预定义列的名称 TXT格式文件用管道符号分隔 我需要跳过每个TXT文件的前两行 我尝试了这段代码,得到的错误是: VBscript错误输入超过文件结尾 ArrE=数组(“D1”、“D2”、“D3”、“D4”、“D5”、“D6”) 对于I=0至UBound(ArrE) 设置objTextFile=objFSO.OpenTextFile(“C:\”&ArrE(I)和“\u A3.txt”,用于读取) objTextF

我需要从六个TXT格式文件中填充一个现有的XLSX格式文件

XLSX格式文件中,有预定义列的名称

TXT格式文件用管道符号分隔

我需要跳过每个TXT文件的前两行

我尝试了这段代码,得到的错误是:

VBscript错误输入超过文件结尾

ArrE=数组(“D1”、“D2”、“D3”、“D4”、“D5”、“D6”)
对于I=0至UBound(ArrE)
设置objTextFile=objFSO.OpenTextFile(“C:\”&ArrE(I)和“\u A3.txt”,用于读取)
objTextFile.ReadAll
lineCount=objTextFile.Line
objTextFile.Close
设置objTextFile2=objFSO.OpenTextFile(“C:\”&ArrE(I)和“\u A3.txt”,用于读取)
i=0
当我数数的时候
objTextFile2.ReadLine
i=i+1
温德
设置objExcel=CreateObject(“Excel.Application”)
objExcel.Application.Visible=True
设置objWorkbook=objExcel.Workbooks.Open(“C:\PAB\u A3\u def\u REV01.xlsx”)
设置objWorksheet=objWorkbook.worksheet(1)
j=1
直到objTextFile2.AtEndOfStream
line=objTextFile2.ReadLine
objWorksheet.Cells(1,j).Value=行
j=j+1
环
下一个
更新#01

ArrE = Array("D1", "D2", "D3", "D4", "D5", "D6")

 For I = 0 To UBound(ArrE)

   Set objTextFile = objFSO.OpenTextFile("C:\" & ArrE(I) & "_A3.txt", ForReading)

   objTextFile.ReadAll
   lineCount = objTextFile.Line
   objTextFile.Close

   Set objTextFile2 = objFSO.OpenTextFile("C:\" & ArrE(I) & "_A3.txt", ForReading)

   i = 0
   while i < lineCount -1
     objTextFile2.ReadLine
     i = i+1
   wend

   Set objExcel = CreateObject("Excel.Application")
   objExcel.Application.Visible = True
   Set objWorkbook = objExcel.Workbooks.Open("C:\PAB_A3_def_REV01.xlsx")
   Set objWorksheet = objWorkbook.Worksheets(1)

   j = 1
   Do Until objTextFile2.AtEndOfStream
     line = objTextFile2.ReadLine
     objWorksheet.Cells(1, j).Value =  line
     j=j+1
   Loop  

 Next
ArrE=数组(“D1”、“D2”、“D3”、“D4”、“D5”、“D6”)
对于I=0至UBound(ArrE)
设置objTextFile=objFSO.OpenTextFile(“C:\”&ArrE(I)和“\u A3.txt”,用于读取)
objTextFile.ReadAll
lineCount=objTextFile.Line
objTextFile.Close
设置objTextFile2=objFSO.OpenTextFile(“C:\”&ArrE(I)和“\u A3.txt”,用于读取)
i=0
而我
该解决方案基于在目标xlsx文件中如何安排数据的假设。请根据您的要求修改

假设:

  • 代码从vbs(vbs)文件运行
  • 从第三行开始到每个文件最后一行的数据在目标文件中按行排列,下一个文本文件的数据放在最后一行的下面
  • 每行中的数据将用分隔符|分割,并从1开始跨列分布
  • 修改的问题:

  • 目标文件只能打开一次。所以open语句离开了循环
  • 发现无需多次迭代/读取。因此,单次迭代用于收集数据,从第三行开始
  • 修改代码:

    Set objFSO = CreateObject("Scripting.FileSystemObject")
    ArrE = Array("D1", "D2", "D3", "D4", "D5", "D6")
    Set objExcel = CreateObject("Excel.Application")
    objExcel.Application.Visible = True
    Set objWorkbook = objExcel.Workbooks.Open("C:\PAB_A3_def_REV01.xlsx")
    Set objWorksheet = objWorkbook.Worksheets(1)
    Rw = 0
     For i = 0 To UBound(ArrE)
       Set objTextFile = objFSO.OpenTextFile("C:\" & ArrE(i) & "_A3.txt", 1) 'ForReading)
       j = 1
       Do Until objTextFile.AtEndOfStream
         Line = objTextFile.ReadLine
            If j > 2 Then        
            arr = Split(Line, "|")
    
                  If UBound(arr) >= 0 Then
                  Rw = Rw + 1
                  End if
    
                For col = 0 To UBound(arr)
                objWorksheet.Cells(Rw, col + 1).Value = arr(col)
                Next 
            End If
         j = j + 1
       Loop
     objTextFile.close
     Next
    

    使用临时数据测试脚本。如有问题,请随时联系。

    文件的最后一行是否以CrLf结尾?(使用适当的编辑器,如notepad2或npp进行检查)将TXT作为普通工作簿打开,删除前2行,然后复制/粘贴。我不明白为什么要在
    objTextFile2
    的行中重复两次。第二个循环可能会失败,因为指针已经到达蒸汽末端。当我初始化为0时,请尝试将我时的行
    更改为
    时的行
    。@AhmedAU非常感谢您的帮助,请参阅我第一个问题中的更新#01。现在我在脚本上没有错误,但是XLSX文件是空的。excel文件是空的,因为
    objTextFile2
    的第二次迭代不起作用,因为指针在第一次迭代中已经到达了文件的末尾(我认为第一次循环什么也没做)。发布一个关于如何在目标Xlsx文件中安排数据的假设答案。
    Set objFSO = CreateObject("Scripting.FileSystemObject")
    ArrE = Array("D1", "D2", "D3", "D4", "D5", "D6")
    Set objExcel = CreateObject("Excel.Application")
    objExcel.Application.Visible = True
    Set objWorkbook = objExcel.Workbooks.Open("C:\PAB_A3_def_REV01.xlsx")
    Set objWorksheet = objWorkbook.Worksheets(1)
    Rw = 0
     For i = 0 To UBound(ArrE)
       Set objTextFile = objFSO.OpenTextFile("C:\" & ArrE(i) & "_A3.txt", 1) 'ForReading)
       j = 1
       Do Until objTextFile.AtEndOfStream
         Line = objTextFile.ReadLine
            If j > 2 Then        
            arr = Split(Line, "|")
    
                  If UBound(arr) >= 0 Then
                  Rw = Rw + 1
                  End if
    
                For col = 0 To UBound(arr)
                objWorksheet.Cells(Rw, col + 1).Value = arr(col)
                Next 
            End If
         j = j + 1
       Loop
     objTextFile.close
     Next