【问题标题】:Line Breaks Not Found when Opening File in Access VBA在 Access VBA 中打开文件时未找到换行符
【发布时间】:2018-08-07 22:11:58
【问题描述】:

我有一个程序使用“\n”字符写入文本文件。我让它将它写入一个 .csv 文件,以便我可以获取该信息并将其导入 Access 数据库。我遇到的问题是 Microsoft Access VBA 和记事本无法识别文件中的换行符。写字板、Access 的内置 Import 和 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

【问题讨论】:

  • 也许试试 '\r\n'。
  • 用于指示换行符的字符通常因操作系统而异:在 Windows 上通常是回车 + 换行。 en.wikipedia.org/wiki/Newline

标签: c# sql vba ms-access


【解决方案1】:

换行控制字符:

  • \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

更多信息:

【讨论】:

  • 做到了!感谢您的帮助
【解决方案2】:

您没有提到拥有 CSV 文件的访问链接。

如果 Access' 内置的导入可以识别换行符,那么依赖链接方法将比基于 vba 的导入更容易。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-31
    • 1970-01-01
    • 2018-10-22
    • 2013-08-01
    相关资源
    最近更新 更多