vba - 有没有一种方法可以使用与 VBA 的默认分隔符 (vbCr/vbCrLf) 不同的分隔符一次一行地读取文件?

标签 vba excel csv

我正在尝试读取一个多行 .csv 文件,并将每个标记放在 Excel 中它自己的单元格中。问题是我无法控制传入的 .csv 文件。

它们在列数方面都是相同的(尽管行数可变,但这很容易解释)。但是,无论出于何种原因,.csv 文件的源有时 会在标题行的末尾放置一个CRLF,而有时 它只会放置一个低频。同样,我无法控制这一点,因此我必须围绕可变性进行编码。

据我所知,VBA 行 Line Input #1, strLine 使用 CRCRLF 来分隔行,这使得感觉。我试图将整个 .csv 文件的内容放入一个字符串中,然后使用 Replace strFileContents, vbCr, "" 消除所有 CR 字符,但看起来好像这也摆脱了所有后来出现的 CRLF,让我回到开始的地方。

那么,有没有办法让我使用 Line Input #1, strLine 而不是 LF 分隔符一次接受一行?还是有另一种方法可以操纵字符串的全部内容(即仅删除 CR 而不是 CRLF 的实例)和 Split() 那里的字符串?

这是我的代码的简化版本:

Dim Column, Row As Integer 'used Sheets().Input(Row, Column).Value to insert strings
Open strFilePath For Input Access Read As #1
Do Until EOF(1)
    Line Input #1, strLine
    strLine = Split(strLine, vbLf)(1)
    arr = Split(strLine, ",")
    For Column = 1 to 8
        'insert stuff
    Next Column
    Row = Row + 1
Loop

然而,这对我来说不太适用,我相信如果它适用,我仍然需要处理额外的 CR 字符。

谢谢。

最佳答案

asc(vbLF)=10
asc(vbCR)=13
asc(vbCRLF)=13

所以只替换 vbLF。


例子

Sub test()

    Dim strTest  As String

    strTest = "First Line " & vbLf & "Second Line" & vbCrLf & "Third Line" & vbCr & "Fourth Line"
     strTest = Replace(strTest, vbCrLf, vbCr) '/ Gets rid of double line breaks caused by next replacement
    strTest = Replace(strTest, vbLf, vbCr)

    MsgBox strTest


End Sub

关于vba - 有没有一种方法可以使用与 VBA 的默认分隔符 (vbCr/vbCrLf) 不同的分隔符一次一行地读取文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47273217/

相关文章:

vba - 使用 VBA 从不同的工作表进行 Vlookup

excel - 获取 Excel 中某一列的最后一行,无需 VBA

vba - 将数据从一个电子表格复制到另一个

excel - 将 CSV 直接导入 ListObject

shell - 使用 gnu 并行处理带标题的 CSV 文件

vba - 如何检测 Powerpoint 2007 VBA 中的主题字体?

excel - Ghost/Phantom 工作簿/工作表与合法工作表一起出现在 VBA 项目列表中

VBA 将结果全部显示在第一张纸上,而不是相关的纸上?

c# - 单元格中的Excel图像

java - 如何将 CSV 文件导入没有任何列名或架构的 BigQuery 表?