如何在同一循环中“从 .csv 读取并写入 excel”
Posted
技术标签:
【中文标题】如何在同一循环中“从 .csv 读取并写入 excel”【英文标题】:How To 'Read From .csv and Write To excel' In The Same Loop 【发布时间】:2019-05-28 21:40:56 【问题描述】:我正在尝试从 .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 中写入正确的行。感谢您的帮助。
【问题讨论】:
事实证明,我可以使用上述代码写入 excel 文件。但我无法进入文本文件 (.csv) 的下一行,然后进入 excel 文件中的相应行。我无法计算文本文件中的行数,例如 excel strLine 中的行实际上给了我行中的文本而不是整数来计数,这样我就可以将其移至 .csv 中的下一行和中的相应行excel输出文件 所以我需要帮助从文本文件中的第 1 行移动到第 2 行,依此类推。以及写入第 1 行和第 2 行的 excel 文件中的 C 列等等。 请不要在 cmets 中添加额外的信息。只需编辑问题。 【参考方案1】:你得到一个类型不匹配,因为你试图在这一行的字符串中添加一个整数 (1)。
strLine = strLine + 1
如果您想跟踪正在处理的行,则需要调暗一个新的行计数器变量。 您还需要阅读循环内的行,否则您将陷入无限循环。
类似这样的:
dim i
i = 0
Do Until objFile.AtEndOfStream
strLine = objFile.ReadLine
arrFields = Split(strLine,",")
subDoWork strLine
i = i + 1
Loop
【讨论】:
以上是关于如何在同一循环中“从 .csv 读取并写入 excel”的主要内容,如果未能解决你的问题,请参考以下文章
如何在 if else 循环中对同一数据使用多个条件? - java/安卓
如何在 python 循环中更新 matpplotlib 库图,该图位于 Jupyter 笔记本中的同一位置?
如何排除在同一 start_dt 上的数据中创建循环的记录?