【问题标题】:CSV quotes + comma separators and BREAK LINE : import in EXCELwithout break lineCSV 引号 + 逗号分隔符和 BREAK LINE :在 EXCEL 中导入不带换行符
【发布时间】:2024-05-01 21:35:02
【问题描述】:

我有这种 CSV:

所以当我在 EXCEL 2013 中导入“从文本文件中获取数据”时,

1)如何说分隔符IS QUOTES + COMMA

2) 对于 Excel,字段中的 BREAK LINE 是新的数据行...怎么说不是?

我知道 CSV 在 Web 上是一个很长的话题,但没有明显的解决方案。 非常感谢您的帮助。

【问题讨论】:

  • 这称为“文本限定符”。导入时,将文本限定符设置为什么?
  • 我将 COMMA 设置为字段分隔符,将 QUOTES 设置为文本限定符。
  • 尽管如此,Excel 在导入时会创建一个新的数据行,当字段内有一个新行(引号)时
  • 尽量避免使用文本导入向导。如果是 *.csv 文件,只需在 Excel 中使用 File - Open 打开即可。

标签: excel csv line-breaks csv-import


【解决方案1】:

第 1 步:我会先修复文件:

Sub ImportData()
    Dim dataTextFile As String
    Dim outTextFile As String, splitPart As String, missingPart As String, ret As String
    '---Read the file---
    Open "C:\Data.txt" For Input As #1
    dataTextFile = Input$(LOF(1), 1)
    Close #1

    dataTextFile = Replace(dataTextFile, vbNewLine, "[NEW_LINE]")

    ret = GetRegex("(.*?,.*?,.*?),")
    outTextFile = outTextFile & ret & vbNewLine

    Do While 1
        If (ret = GetRegex(dataTextFile, ",(.*?,.*?,.*?)")) <> "" Then
           Exit Do
        Else
            outTextFile = outTextFile & ret & vbNewLine
            dataTextFile = Right(dataTextFile, Len(dataTextFile) - Len(ret))
        End If
    Loop
    '---Write back to the file---
    Open "C:\Data.txt" For Output As #1
    Write #1, outTextFile
    Close #1
End Sub

您可以在此处找到 GetRegex 函数:link。或者只使用一般的 Regex 对象。警告:我还没有测试过代码,所以你可能需要做一些修改。

第 2 步:接下来您只需通过 Import Wizard 将文件正常导入为逗号分隔文件。

第 3 步:最后通过宏或其他方式将“[NEW_LINE]”替换为换行符

或者,您也可以在同一个宏中执行步骤 2-3 - 并使用 Right 函数或正则表达式将该列提取到您的输出工作表中。

【讨论】: