在Excel 2007中使用换行符导入CSV

jer*_*lan 110 csv excel newline excel-2007

我正在开发一项功能,将搜索结果导出到CSV文件,以便在Excel中打开.其中一个字段是一个自由文本字段,可能包含换行符,逗号,引号等.为了抵消这一点,我将字段用双引号(")包装.

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

我也尝试用CR(\ r)替换CR/LF(\ r \n),再用LF(\n)替换,但没有运气.

有没有其他人遇到过这种行为,如果有,你是如何解决的?

TIA,
-J

编辑:
这是我用手写的复制问题的快速文件.

ID,名称,描述
"12345","史密斯,乔","嘿.
我的名字是乔."

当我将其导入Excel 2007时,我最终得到一个标题行和两个记录.请注意,"Smith,Joe"中的逗号正在正确处理.这只是造成问题的换行符.

J A*_*ley 46

Excel(至少在Office 2007 on XP中)的行为可能有所不同,具体取决于是否通过从文件 - >打开菜单打开CSV文件或通过在资源管理器中双击文件来导入CSV文件.

我有一个UTF-8编码的CSV文件,并在某些单元格中包含换行符.如果我从Excel的文件 - >打开菜单中打开此文件,则会弹出"导入CSV"向导,并且无法正确导入文件:即使引用,换行也会启动新行.如果我在资源管理器窗口中双击打开此文件,则无需向导干预即可正确打开.

  • 这是真的!多么奇怪. (7认同)
  • 如果您使用的是德语区域设置,则必须在csv中使用分号(;)而不是逗号(,)才能双击工作... (4认同)
  • 它对我不起作用.使用","作为分隔符,双击打开一列中的所有内容.用";" 作为分隔符,它被正确导入,但多行文本字段除外,它们被导入为多个记录.我有Excel 2010 (3认同)
  • 知道如何获得与双击相同的设置吗? (2认同)
  • @ user1859022我将匈牙利语语言环境加倍.实际上任何使用逗号作为小数分隔符的语言环境必须使用分号作为字段分隔符才能双击csv打开才能正常工作 (2认同)

小智 32

没有一个建议的解决方案适合我.

什么工作(使用任何编码):

从csv文件复制/粘贴数据(在编辑器中打开),然后执行"列中的文本" - >不能正常工作.

转到下一个选项卡并再次复制/粘贴(与剪贴板中已有的相同) - >现在自动运行.

  • 令人难以置信的是,它确实有效!(Excel 15在这里) (3认同)
  • 在我的情况下,这在某种程度上起作用:它正确地将CSV折叠为单个记录,但删除了换行符之后的字段中的所有数据. (2认同)
  • 我可以确认这是有效的,您甚至可以在不同的工作表中粘贴更多数据,而无需重复“文本到列”命令。如果您需要导入多个文件,这很有用。 (2认同)
  • 天啊。这确实有效。这是有道理的。在制作“文本到列”时,Excel 会记住这些设置并且会自动转换。当您将文本分成几行时,它将逐行查看并忽略新行。我认为 MS 应该包含一个复选框来保持行为或重新扫描数据。我不在乎,...如果该死的工作 (2认同)

ket*_*til 25

如果您手动执行此操作,请下载LibreOffice并使用LibreOffice Calc导入CSV.它比我试过的任何版本的Excel做得好得多,如果你之后需要转移到Excel,它可以根据需要保存到XLS或XLSX.

但是,如果你坚持使用Excel并需要更好的修复,那么似乎有办法.它似乎依赖于语言环境(在我的拙见中,这似乎是愚蠢的).我没有Excel 2007,但我有Excel 2010,并给出了示例:

ID,Name,Description
"12345","Smith, Joe","Hey.
My name is Joe."
Run Code Online (Sandbox Code Playgroud)

不起作用.我在记事本中写了它并选择了另存为...,然后在"保存"按钮旁边可以选择编码.我按照建议选择了UTF-8,但没有运气.但是,将逗号更改为分号对我有用.我没有改变任何其他东西,它只是起作用.所以我将示例更改为这样,并在记事本中保存时选择了UTF-8编码:

ID;Name;Description
"12345";"Smith, Joe";"Hey.
My name is Joe."
Run Code Online (Sandbox Code Playgroud)

但有一个问题!它的唯一工作方式是双击CSV文件在Excel中打开它.如果我尝试从文本导入数据并选择此CSV,则它仍然会在引用的换行符上失败.

但还有另一个问题!工作字段分隔符(原始示例中的逗号,在我的示例中为分号)似乎取决于系统的区域设置(在控制面板 - >区域和语言下设置).在挪威,逗号是小数点分隔符.Excel似乎避免使用此字符,而更喜欢使用分号.我可以访问另一台设置为英国英语语言环境的计算机,并且在该计算机上,第一个带逗号分隔符的示例工作正常(仅在双击时),而带分号的那个实际上失败了!互操作性如此之多.如果您想在线发布此CSV并且用户可能拥有Excel,我猜您必须发布这两个版本并建议人们检查哪个文件提供正确的行数.

所以我能够收集到的所有细节都是:

  1. 该文件必须保存为带有BOM的UTF-8,这是您选择UTF-8时记事本的功能.我尝试了没有BOM的UTF-8(可以在Notepad ++中轻松切换),但是双击文档失败了.
  2. 您必须使用逗号或分号分隔符,但不能使用区域设置中的小数分隔符.也许其他人物可以工作,但我不知道哪个.
  3. 您必须引用包含带有"字符"的换行符的字段.
  4. 我在文本字段和记录分隔符中都使用了Windows行结尾(\ r \n),这有效.
  5. 您必须双击该文件才能打开它,从文本导入数据不起作用.

希望这有助于某人.


jer*_*lan 24

我终于找到了问题!

事实证明我们使用Unicode编码而不是ASCII或UTF-8编写文件.更改FileStream上的编码似乎可以解决问题.

谢谢大家的所有建议!

  • ASCII编码似乎没有解决我的问题(虽然在MacOS上),我没有前导空格,我的字段被引用.完全相同的文档导入Google文档.多么令人沮丧.顺便说一句,没有"Unicode"编码的文本文件.它必须是Unicode(UTF-8,UTF-16,UTF-32等)的实现之一 (28认同)
  • 谢谢你的解决方案.我仍然很好奇答案是什么,所以我尝试在Excel中创建一个带换行符的csv并查看它保存的内容.我发现Excel只使用换行符来表示单元格中的新行.如果我尝试在记事本中创建相同的csv,它将使用换行+回车换行.因此,对于单个单元格中的换行符,请确保它仅使用换行符(LF或\n)而不是回车符(CR或\ r).Excel确实使用两者来终止行. (9认同)

Maz*_*zzy 8

使用 Google 表格并导入 CSV 文件。

然后您可以将其导出以在 Excel 中使用


Sam*_*ala 8

使用以下步骤可以使用 Power Query 在 Excel 版本中轻松导入多行 CSV(在 Excel 365 版本 2207 中测试):

  1. 转到数据选项卡
  2. 单击功能区上的“来自文本/CSV”
  3. 选择文件并单击导入
  4. 单击“转换数据”打开 Power Query 编辑器
  5. 单击 Power Query 编辑器功能区上的“数据源设置”
  6. 点击“更改来源”
  7. 从“换行符”下拉列表中选择“忽略带引号的换行符”。
  8. 单击确定 -> 关闭 -> 关闭并加载


Lil*_*hal 7

简答

删除换行符/换行符(\n使用Notepad ++).Excel仍会识别回车符(\n \r)以分隔记录.

答案很长

如上所述,CSV字段中支持换行符,但Excel并不总是正常处理它们.我遇到了类似的问题,第三方CSV可能存在编码问题,但编码更改没有改善.

对我有用的是删除所有换行符(\n).这具有将字段折叠到单个记录的效果,假设您的记录由回车符和换行符(CR/LF)的组合分隔.然后,Excel将正确导入文件并通过回车识别新记录.

显然,一个更清晰的解决方案是首先用\r\n临时字符组合替换真正的换行符(),\n用您选择的分隔符(例如分号文件中的逗号)替换换行符(),然后再用适当的换行符替换临时字符.


小智 5

如果该字段包含前导空格,则Excel会将双引号忽略为文本限定符.解决方案是消除逗号(字段分隔符)和双引号之间的前导空格.例如:

破碎:
名称,标题,描述
"约翰","先生","我的详细描述"

工作:
姓名,职务,描述
"约翰","先生","我的详细说明"

  • 但我同意,我的输出中没有任何前导空格.有任何想法吗? (3认同)