在Excel 2007中导入带有换行符的CSV文件

154

我正在开发一个功能,将搜索结果导出到CSV文件中以在Excel中打开。其中一个字段是自由文本字段,可能包含换行符、逗号、引号等等。为了解决这个问题,我已经用双引号(")将该字段括起来。

然而,当我将数据导入Excel 2007中,并设置适当的分隔符和文本限定符为双引号时,换行符仍然会在换行处创建新记录,而我希望在单个单元格中看到整个文本字段。

我也尝试用CR/LF (\r\n)替换为只有CR (\r),再用只有LF (\n),但是没有成功。

有没有其他人遇到过这种情况,如果有,你们是如何解决的呢?

TIA,
-J

编辑:
这里是我手动编写的快速文件,用于复制该问题。

  

ID,Name,Description
  "12345","Smith, Joe","嘿。
  我叫乔。”

当我将其导入Excel 2007时,我得到一个标题行和两个记录。请注意,"Smith, Joe"中的逗号被正确处理。只有换行符会导致问题。


我已经在Notepad++中查看了CSV文件,一切似乎都是正确的。我有其他带逗号的字段,它们被正确导入了。只是换行符引起了问题。 - jeremyalan
7
我对包含多行数据的UTF8 .csv文件和Excel存在问题。最终我只能将文件上传至Google文档,然后在Google表格中打开并下载为.xls文件。这样对我来说效果很好。 - creuzerm
25个回答

4

+1 J Ashley的评论。我也遇到了这个问题。事实证明,Excel需要:

  • 在引号字符串中有一个换行符(“\n”)

  • 每行之间需要一个回车和换行符。

例如:

"Test", "Multiline item\n
multiline item"\r\n
"Test2", "Multiline item\n
multiline item"\r\n

我使用notepad++来正确地分隔每一行,并且只在字符串中使用换行符。通过在空白的Excel文档中创建多行条目并在notepad++中打开csv文件来发现这一点。


1
当我根据我的语言环境设置字段分隔符后,只使用换行符作为多行项和行分隔符时,它对我有效。 - robotik
注意:这在Office Pro Plus 2013中无法正常工作。我怀疑不同的版本对此的处理方式不同。 - m1m1k

2
将内容粘贴到Notepad ++中,选择编码>在ANSI中编码,再次复制所有内容并粘贴到Excel中 :)

2

我遇到了类似的问题。我在MySQL中有一些推特数据。该数据中包含换行符(LF或\n)。我需要将MySQL数据导出到Excel中,但是这些换行符会破坏我的csv文件导入。所以我进行了以下操作 -

1. From MySQL exported to CSV with Record separator as CRLF
2. Opened the data in notepad++ 
3. Replaced CRLF (\r\n) with some string I am not expecting in the Data. I used ###~###! as replacement of CRLF
4. Replaced LF (\n) with Space
5. Replaced ###~###! with \r\n, so my record separator are back.
6. Saved and then imported into Excel

注意:在替换CRLF或LF时,不要忘记勾选“扩展”(\ n,\ r,\ t…复选框[查看对话框左下角)


2

我在WinXP上使用Excel 2010,区域设置为法语。以下是一些相关的经验总结:

  • 导入csv文件时,分隔符必须与您的区域设置中的列表分隔符相对应(在我的情况下是;)
  • 您必须从资源管理器中双击文件,而不是从Excel中打开它

2

在MacOS上尝试使用Numbers

如果您可以访问Mac OS,我发现苹果电子表格软件Numbers可以很好地处理复杂的多行CSV文件,而Excel则无法处理。只需使用Numbers打开.csv文件,然后导出到Excel即可。


2

处理CSV文件时,Excel存在严重问题。LibreOffice执行得更好。因此,我发现:

  • 文件必须使用带BOM的UTF-8编码,因此请考虑以下所有要点
  • 最佳结果是通过从“文件资源管理器”中打开它来实现的
  • 如果您在Excel内部打开它,可能会有两种可能的结果:
    • 如果它只包含ASCII字符,那么它很可能可以正常工作
    • 如果它包含非ASCII字符,则会破坏您的换行符
  • 它似乎严重依赖于操作系统区域设置中配置的小数分隔符,因此您必须选择正确的分隔符
  • 我敢打赌,它也可能因操作系统和Office版本而表现不同

你是在断言LibreOffice比Excel更擅长“猜测”,对吗?除非你告诉它去猜测,否则Excel在导入文本文件时会询问所有正确的问题。 - Tom Blodget
1
谢谢!这帮助我将我的CSV文件从“UTF-8无BOM”转换为“UTF-8有BOM”(在Notepad++中只需选择简单的“UTF-8”菜单)。然后我只需从资源管理器中打开它,Excel就会以正确的方式显示它,包括正确的符号和单元格内的正确换行。当我使用默认的“UTF-8无BOM”编码从资源管理器中打开它时,Excel可以正确导入换行符,但是会以错误的方式显示非拉丁字符。如果我从Excel中打开它,则可以正确显示编码,但无法处理换行符。 - Sergey Beloglazov

1

以下是适用于Excel 2016的内容:

我也曾遇到使用Excel向导时CSV文件中出现换行符的同样问题。

随后,我尝试使用“新查询”功能来解决此问题:

数据 -> 新查询 -> 从文件 -> 从CSV文件 -> 选择文件 -> 导入 -> 加载

这种方法非常有效且快速,适用于所有遇到同样问题的用户。


我进行测试,但是在单元格内使用制表符和换行符似乎无法正常工作(在LibreOffice和Google文档中文件正常)。单元格内的换行符会跳到下一行... - Denis Chenu

1

看起来在更近期的 Excel 版本中,这个过程要简单得多:

  1. 进入 "数据" -> "获取数据 (Power Query)"
  2. 在打开的对话框中,在右侧选择 "文本/CSV"
  3. 搜索文件,然后点击 "下一步" 并按照建议操作(在我的情况下,Excel 正确地识别了它是 UTF8 编码,单元格由 ";" 分隔,文本标识符为双引号 ("))
  4. 完成!

这需要一点时间来加载,但之后我就有了一个自动格式化的表格,看起来非常漂亮,并且能够理解多行条目仍然属于同一条目。

如果您想要正确显示多行内容,只需格式化单元格,在 "对齐方式" 下勾选 "自动换行" 复选框即可。这应该可以解决您的最后一个问题。

祝您好运! ;-)


1

使用Excel 2019时,当通过“数据”->“从文本文件/CSV导入”处理CSV文件时,我遇到了类似的问题。一旦建立了连接并同步了数据,它会报告 xx 个错误,因为换行符引起了列位移。

我解决了这个问题:

  1. 编辑查询(查询->编辑)

  2. 这将打开Power Query Editor

  3. 转到“开始” ->“高级编辑器”

  4. 这将以文本格式打开查询,其中第二行有一个指令,例如

    Source = Csv.Document(File.Contents("my.csv"),[Delimiter=",", .... , QuoteStyle=QuoteStyle.None]),

  5. 将QuoteStyle.None更改为QuoteStyle.Csv

  6. 点击“完成”

  7. 应用并关闭

文档在此处找到:https://learn.microsoft.com/en-us/powerquery-m/csv-document

NB。我后来发现这个选项在UI中的“隐藏”位置。在Power Query编辑器中,单击“数据源设置”,更改源(左下角),并且“Line breaks”组合框应该说在引号之间忽略换行符

NB2。我在荷兰的Excel上工作,因此我上述按钮标题的翻译可能有点不准确。


0

只需创建一个带有换行符的新工作表,将其保存为CSV文件,然后使用可以显示行尾字符的编辑器(如Notepad++)打开它。通过这样做,您会注意到单元格中的换行符是用LF编码的,而“真正”的行尾是用CR LF编码的。Voilà,现在您知道如何生成适用于Excel的“正确”CSV文件了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接