使用段落标记在VBA中循环CSV文件

时间:2017-08-08 11:27:27

标签: excel vba excel-vba csv

我的每个行末尾都有一个带有段落标记的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将变为真。请提供一些意见。

2 个答案:

答案 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。