在Access VBA中打开文件时找不到换行符

时间:2018-02-28 05:40:32

标签: c# sql vba access

我有一个程序用" \ n"写入文本文件。字符。我把它写入.csv文件,以便我可以获取该信息并将其导入Access数据库。我遇到的问题是Microsoft Access VBA和记事本无法识别文件中的换行符。 Wordpad,Access内置导入,Excel DO 识别换行符。如果我在Excel或写字板中打开.csv文件,不做任何更改,并再次将文件另存为.csv文件,那么它将显示正确。

The file opened in Notepad

The file opened in Excel

The file importing in Access

我有一个VBA脚本可以从文件中导入数据,因为数据会重复添加到主工作表中。我希望它从.csv文件中获取每一行,如果ID已经存在,则将其作为新行插入,如果有,则更新现有行。这是测试和工作的文件,他们公然在不同的行(在记事本中显示为不同的行),但它只是我的程序生成的文件(使用\ n作为新行)。

另一个程序是用C#构建的...所以,我想我的问题是:是否有一个更好的换行符或序列在C#中使用,以便在换行时更普遍地识别?

对于后代,这是我的VBA脚本正在使用的代码,它将文件作为一行读取并缺少换行符:

'Now read the file
Open csvLoc For Input As #1
Do While Not EOF(1)
    Line Input #1, csvLine
    Debug.Print csvLine
    lineArray = Split(csvLine, ",")
    <-- Code handling the now split line array -->
Loop
Close #1

2 个答案:

答案 0 :(得分:0)

换行控制字符:

  • \n = “换行”(LF)= ASCII代码10 = VBA常量:vbLf

  • \r = “回车”(CR)= ASCII码13 = VBA常数:vbCr

或Windows更喜欢两者的组合:

  • \r\n = “CR + LF” = ASCII码13 + 10 = VBA常量: vbCrLf

由于您已经存在LF,因此有许多简单的方法可以将它们更改为CRLF。我想不出任何附加角色会成为问题的方式。

最好的计划是更改创建文件的源应用程序,因此请使用两个字符而不是一个。

如果您主要关注的是使用VBA导入的数据,则可以对代码进行少量更改,以替换字符:

Open csvLoc For Input As #1
Do While Not EOF(1)
    Line Input #1, csvLine
    csvLine = Replace(csvLine, vbLf, vbCrLf)
    Debug.Print csvLine
    lineArray = Split(csvLine, ",")
    <-- Code handling the now split line array -->
Loop
Close #1

更多信息:

答案 1 :(得分:0)

您没有提及CSV文件的Access链接。

如果访问&#39;内置导入可以原生地识别换行符 - 然后依赖链接的方法比基于vba的导入更容易。