如何在同一循环中“从.csv读取并写入excel”

时间:2019-05-28 21:40:57

标签: excel csv vbscript

我正在尝试从.csv文件中读取数据并将其粘贴到3270终端屏幕上,同时将这些尝试的结果写入到准确反映.csv的相应excel文件中

我已经创建了从.csv文件读取的代码,并将该值粘贴到3270屏幕上。但是在Excel中很难参考确切的行/行来写结果

这是我的循环:

  strLine = objFile.ReadLine
  Do Until objFile.AtEndOfStream                
     arrFields = Split(strLine,",") 
     subDoWork (strLine)
  strLine = strLine + 1
  Loop

subDoWork然后读取.csv并粘贴数据:

Sub subDoWork(strLine)

    ColumnA = arrFields(0)
    ColumnB = arrFields(1)

     subMoveCursor 1, 10                                                                                             
     subEnterData ColumnA

    If (funcReadScreen(12,27,1) <> "0") Then

      oExcelObject.Cells(3).Value = "Skipped SAF1"
      oExcelObject.DisplayAlerts = False
      ExcelWorkbook.Save
    End If
End Sub

我在这里创建对象并在获取扩展文件时设置变量:

Set oExcelObject = CreateObject("Excel.Application")
Set oFileObject  = CreateObject("Scripting.FileSystemObject")

 Sub subExternalFile
   rw = 2
   strFilter = ""
   strExternalFilePath = funcSolicitFile(strFilter)
   strExternalFilePath1 = 
     "\\DAYFS02\mortvc$\_Scripts_Custom\DisasterScript_OutPut.xlsx"
       Set objFile  = oFileObject.OpenTextFile(strExternalFilePath)
       Set oExcelFile   = oFileObject.GetFile(strExternalFilePath1)
       strExcelFileName = oExcelFile.Name
       Set oExcelObject = GetObject("","Excel.Application")
       Set ExcelWorkbook = 
       oExcelObject.Workbooks.Open(strExternalFilePath1)
       Set oExcelSheet   = ExcelWorkbook.Sheets(1)
   oExcelObject.Application.Visible = False
 End Sub

我希望从文本文件的第1行读取。要读取arrfields(0)和arrfields(1),只需两列,然后将该数据粘贴到3270屏幕上。并且,如果屏幕上读取的内容特定,则写入C列(3)中excel文件的第1行。然后移至第2行并执行相同操作,读取.csv文件,然后写入excel文件中相应行号的第(3)列。

当它尝试写入excel文件时,我收到一个错误,即找不到对象。虽然我正在创建对象。尝试计算strLine时也会出现“类型不匹配”错误,以便我可以移至下一行/行。

--------编辑05/29/2019 ---------- 我工作了。我可以在.csv文件中逐行移动并粘贴到屏幕上。但是,在写入excel时,每次都会覆盖C列(第2行,第一行是标题)。根据.csv第3行的结果,我无法将其写入excel的第3行C列。我也没有将.csv的第一行标识为标头,实际上我从.csv中删除了标头,但标头仍在excel文件中(第1行)。因此,从技术上讲,.csv中的第1行是excel中的第2行。我不确定是否需要在第一个循环中放置一个循环以计算excel中的行,并确保基于.csv中的行写入excel中的正确行。感谢您的协助。

1 个答案:

答案 0 :(得分:0)

由于试图在此行中的字符串中添加整数(1),所以类型不匹配。

strLine = strLine + 1

如果要跟踪正在处理的行,则需要使新的行计数器变量变暗。 您还需要阅读循环内部的行,否则将导致无限循环。

类似这样的东西:

dim i
i = 0
Do Until objFile.AtEndOfStream   
   strLine = objFile.ReadLine             
   arrFields = Split(strLine,",") 
   subDoWork  strLine
   i = i + 1
Loop