Как «читать из .csv и писать, чтобы преуспеть» в том же цикле - PullRequest
0 голосов
/ 29 мая 2019

Я пытаюсь прочитать из файла .csv и вставить эти данные на экран терминала 3270, записывая результат этих попыток в соответствующий файл Excel, который точно отражает .csv

Я создал код, который читает из файла .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. И если на экране что-то читается конкретно, записать в строку 1 файла excel в столбце C (3). Затем перейдите к строке 2 и сделайте то же самое, прочитайте файл .csv, а затем запишите в столбец (3) соответствующий номер строки в файле excel.

Когда он пытается записать в файл Excel, я получаю сообщение об ошибке, что объект не может быть найден. Хотя я создаю объект. Я также получаю ошибку «Несоответствие типов» при попытке подсчитать strLine, чтобы я мог перейти к следующей строке / строке.

-------- Редактировать 29.05.2009 ---------- Я получил это работает. Я могу переходить от строки к строке в файле .csv и вставлять на экран. Однако при записи в excel он каждый раз перезаписывает столбец C (строка 2, первая строка - заголовки). Я не могу заставить его записать в строку 3 столбец C Excel, основываясь на результате в строке 3 CSV. Я также не идентифицирую первую строку .csv как заголовки, фактически я удалил заголовок из .csv, но все еще имею заголовок в файле excel (строка 1). Технически, строка 1 в .csv - это строка 2 в Excel. Я не уверен, нужно ли мне помещать цикл в мой первый цикл, чтобы посчитать строки в Excel и убедиться, что я пишу в правильную строку в Excel на основе строки в .csv. Ваша помощь приветствуется.

1 Ответ

0 голосов
/ 29 мая 2019

Вы получаете несоответствие типов, потому что вы пытаетесь добавить целое число (1) к строке в этой строке.

strLine = strLine + 1

Если вы хотите отслеживать, над какой строкой вы работаете с ваминужно затемнить новую переменную счетчика строки.Вам также нужно прочитать строку внутри цикла, иначе вы получите бесконечный цикл.

Примерно так:

dim i
i = 0
Do Until objFile.AtEndOfStream   
   strLine = objFile.ReadLine             
   arrFields = Split(strLine,",") 
   subDoWork  strLine
   i = i + 1
Loop
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...