使用 VBScript 从 TXT 格式文件填充现有的 XLSX
Populate an existing XLSX from TXT format file using VBScript
我需要从六个 TXT 格式文件.
中填充一个现有的 XLSX 格式文件
在 XLSX 格式文件 上有预定义列的名称。
TXT格式文件用竖线分隔| 符号.
我需要跳过每个 TXT 文件的前两行。
我试过这段代码,得到的错误是:
VBscript error input past end of file
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
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
更新#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
解决方案基于假设数据在目标 xlsx 文件中的排列方式。请根据您的要求修改它。
假设:
- 代码是 运行 来自 vbscript (vbs) 文件。
- 每个文件的第3行到最后一行的数据在目标文件中按行排列,下一个文本文件的数据放在最后一行的下面
- 每一行的数据要用分隔符|分隔并分布在从 1
开始的列中
问题修改:
- 目标文件只能打开一次。所以open语句移出了Loop
- 发现不需要多次迭代/读取。所以单次迭代用于收集数据,从第 3 行开始。
修改后的代码:
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
使用临时数据测试脚本。有问题随时联系。
我需要从六个 TXT 格式文件.
中填充一个现有的 XLSX 格式文件在 XLSX 格式文件 上有预定义列的名称。
TXT格式文件用竖线分隔| 符号.
我需要跳过每个 TXT 文件的前两行。
我试过这段代码,得到的错误是:
VBscript error input past end of file
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
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
更新#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
解决方案基于假设数据在目标 xlsx 文件中的排列方式。请根据您的要求修改它。
假设:
- 代码是 运行 来自 vbscript (vbs) 文件。
- 每个文件的第3行到最后一行的数据在目标文件中按行排列,下一个文本文件的数据放在最后一行的下面
- 每一行的数据要用分隔符|分隔并分布在从 1 开始的列中
问题修改:
- 目标文件只能打开一次。所以open语句移出了Loop
- 发现不需要多次迭代/读取。所以单次迭代用于收集数据,从第 3 行开始。
修改后的代码:
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
使用临时数据测试脚本。有问题随时联系。