首页 文章

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

提问于
浏览
98

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

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

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

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

TIA,
-J

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

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

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

19 回答

  • 0

    在MacOS上尝试使用Numbers

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

  • 0

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

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

  • 4

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

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

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

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

  • 22

    我终于找到了问题!

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

    谢谢大家的所有建议!

  • 0

    在我的情况下,在记事本中打开CSV并添加 SEP="," 作为第一行允许我在Excel中打开带有换行符和utf-8的CSV而不会出现问题

  • 0

    用TAB(\ t)替换分隔符而不是逗号(,) . 然后在编辑器中打开文件(记事本等),从那里复制内容,然后将其粘贴到Excel文件中 .

  • 1

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

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

    ID,Name,Description
    "12345","Smith, Joe","Hey.
    My name is Joe."
    

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

    ID;Name;Description
    "12345";"Smith, Joe";"Hey.
    My name is Joe."
    

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

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

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

    • 该文件必须保存为带有BOM的UTF-8,这是您选择UTF-8时记事本的功能 . 我尝试了没有BOM的UTF-8(可以在记事本中轻松切换),但双击文档失败 .

    • 您必须使用逗号或分号分隔符,但不能使用小数分隔符您的区域设置 . 也许其他人物可以工作,但我不知道哪个 .

    • 您必须引用包含带有“字符”的换行符的字段 .

    • 我在文本字段和记录分隔符中都使用了Windows行结尾(\ r \ n),这有效 .

    • 您必须双击该文件才能打开它,从文本导入数据不起作用 .

    希望这有助于某人 .

  • 2

    简答

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

    答案很长

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

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

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

  • 2

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

    破碎:
    姓名, Headers ,描述
    "John","Mr.","My detailed description"

    工作:
    姓名, Headers ,描述
    "John","Mr.","My detailed description"

  • 27

    关于J Ashley的评论1 . 我也遇到了这个问题 . 事实证明Excel需要:

    • 带引号的字符串中的换行符(“\ n”)

    • 每行之间的回车符和换行符 .

    E.g. "Test","Multiline item\n multiline item" \ r \ n "Test2","Multiline item\n multiline item" \ r \ n

    我使用记事本正确划分每一行,并仅使用字符串中的换行符 . 通过在空白Excel文档中创建多行条目并在记事本中打开csv来发现这一点 .

  • 6

    粘贴到记事本中,选择编码> ANSI编码,再次复制并粘贴到Excel :)

  • 43

    如果有人绊倒这个帖子并且正在寻找一个确定的答案,那么(相信提到LibreOffice的人:

    1)安装LibreOffice 2)打开Calc并导入文件3)我的txt文件的字段分隔,“4”中的字符字段保存为ODS文件5)在Excel中打开ODS文件6)另存为.xls(x) 7)完成.8)这对我来说非常有效,并为我节省了宝贵的时间!

  • 5

    我在使用法语区域设置的WinXP上使用Excel 2010的经验

    • 导入的csv的分隔符必须对应于区域设置的列表分隔符(;在我的情况下)

    • 您必须双击资源管理器中的文件 . 不要从Excel打开它

  • 0

    我遇到了类似的问题 . 我在MySQL中有一些推特数据 . 数据在数据中有换行符(LF或\ n) . 我需要将MySQL数据导出到excel中 . LF搞砸了我导入的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 ...复选框[查看对话框的左下角]

  • 0

    什么对我有用,直接导入Excel,只要导入是以文本格式而不是csv格式完成的 . M /

  • 0

    只需使用带有换行符的单元格创建一个新工作表,将其保存到csv,然后使用可以显示行尾字符的编辑器(如记事本)打开它 . 通过这样做,您将注意到单元格中的换行符使用LF编码,而“实际”行尾是使用CR LF的代码 . Voilà,现在你知道如何为excel生成一个“正确的”csv文件 .

  • 2

    我也遇到过这个问题:ie . ,csv文件(逗号分隔,双引号分隔的字符串),带引号字符串的LF . 这些是下载的Square文件 . 我做了一个数据导入,但没有导入为文本文件,导入为“从HTML” . 这次它忽略了引用字符串中的LF .

  • 23

    这适用于Mac,使用csv并在Excel中打开文件 .

    使用python编写csv文件 .

    data ='“单元格a1 \ r \ n第一行单元格a1 \ r \ n第3行单元格a1”,“单元格b1”,“单元格第1行c1 \ r \ n单元格c1中的第二行“\ n”单元格a2“\ n”中的第一行

    file.write(数据)

  • 0

    根据CSV标准,双引号内的换行符完全正常 . 在Excel中解析换行符取决于列表分隔符的OS设置:

    在再次尝试之前,请不要忘记完全关闭Excel .

    我已经成功地复制了这个问题,并且能够在Max和Windows中使用上述方法修复它 .

相关问题