我的每个行末尾都有一个带有段落标记的CSV文件,我必须循环CSV文件并使用VBA复制到Excel工作表。请找到我正在使用的以下代码,
Dim filePath As String
Dim row_number As Integer
Dim col_number As Integer
Dim lineFromFile As String
Dim lineItems As Variant
fileName = "D:\test.csv"
Open filePath For Input As #1
row_number = 1
Do Until EOF(1)
Line Input #1, lineFromFile
lineItems = Split(lineFromFile, ",")
col_number = 1
For i = 0 To 15
Sheets("Sheet1").Rows(row_number).Columns(col_number + i).value = lineItems(i)
row_number = row_number + 1
Loop
Close #1
Image for CSV file showing paragraph marker
问题是当控制器在结束时到达段落标记并且它只读取第一行时,EOF将变为真。请提供一些意见。
答案 0 :(得分:0)
我并不是非常精通阅读文本文件,但除非有办法改变VBA所看到的EOL标记,否则你必须在一个字符处读取一个字符。时间,填充您自己的内部字符串缓冲区,直到到达段落标记。
即。用您自己的功能替换
Line Input #1, lineFromFile
- 如下所示:
lineFromFile = ReadALineFromMyFile(#1)
一次读取一个字符并返回lineFromFile
一旦找到了段落标记。
您的代码将识别为" EOL"并且可以处理您正在填写的行缓冲区。
泡沫,冲洗,重复直至达到真正的EOF。
答案 1 :(得分:0)
我得到了一个解决方案。由于最后的换行,我无法通过循环读取文件。所以我将按行分割行和读取数据,
Line Input #1, lineFromFile
lines = Split(lineFromFile, vbLf)
For Each line In lines
lineItems = Split(line, ",")
Sheets("Sheet1").Rows(row_number).Columns(col_number + i).value = lineItems(i)
Next line
这对我来说很好。谢谢@ FreeMan,Luuklag。