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

Importing CSV with line breaks in Excel 2007

我正在开发一项功能,将搜索结果导出到要在Excel中打开的csv文件中。其中一个字段是自由文本字段,它可能包含换行符、逗号、引号等。为了抵消这一点,我将该字段用双引号(")括起来。

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

我还尝试用just cr(
)替换cr/lf(
),再次用just lf(),但没有运气。

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

蒂亚-J

编辑:这是我亲手写的一份复制问题的快速文件。

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

当我将它导入到Excel2007中时,最终得到一个标题行和两个记录。注意,"史密斯,乔"中的逗号处理得很好。正是断线导致了问题。


Excel(至少在Office2007的XP上)的行为可能会有所不同,具体取决于是从"文件"->"打开"菜单打开一个csv文件还是双击资源管理器中的文件来导入该文件。

我有一个用UTF-8编码的csv文件,在某些单元格中包含换行符。如果我从Excel的"文件"->"打开"菜单打开此文件,将弹出"导入csv"向导,无法正确导入该文件:换行符即使在引用时也会开始新行。如果我通过在资源管理器窗口中双击打开此文件,那么它将正确打开,而不需要向导的干预。


所有建议的解决方案都不适合我。

实际工作内容(使用任何编码):

从csv文件复制/粘贴数据(在编辑器中打开),然后执行"列中的文本"-->不起作用,好的。

转到下一个选项卡,然后再次复制/粘贴(与剪贴板中的内容相同)->现在自动工作。


我终于找到问题了!

结果是我们使用的是Unicode编码,而不是ASCII或UTF-8。更改文件流的编码似乎可以解决问题。

谢谢大家的建议!


如果您手动执行此操作,请下载libreoffice并使用libreoffice calc导入csv。它比我尝试过的任何版本的Excel都能更好地完成这类工作,如果以后需要转移到Excel,它可以根据需要保存到XLS或XLSX。

但是,如果你坚持使用Excel并且需要更好的解决方案,那么似乎有一种方法。这似乎取决于地区(在我看来,这似乎是愚蠢的)。我没有Excel 2007,但我有Excel 2010,示例如下:

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

不起作用。我把它写在记事本上,然后选择另存为…,在"保存"按钮旁边,你可以选择编码。我按照建议选择了UTF-8,但没有运气。不过,将逗号改为分号对我来说很有用。我没有改变任何其他东西,它只是起作用了。因此,我将示例改为如下所示,并在记事本中保存时选择了UTF-8编码:

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

但有一个陷阱!唯一的方法是双击csv文件在Excel中打开它。如果我尝试从文本中导入数据并选择这个csv,那么它在引用的换行符上仍然失败。

但还有另一个陷阱!工作字段分隔符(在原始示例中为逗号,在我的示例中为分号)似乎取决于系统的区域设置(在"控制面板"->"区域和语言"下设置)。在挪威,逗号是十进制分隔符。Excel似乎避免使用此字符,而更喜欢使用分号。我可以访问另一台设置为英国英语区域设置的计算机,在那台计算机上,第一个使用逗号分隔符的示例工作正常(仅在双击时有效),而使用分号的示例实际上失败了!对于互操作性来说是如此。如果你想在线发布这个csv,而用户可能有excel,我想你必须发布这两个版本,并建议人们检查哪个文件给出了正确的行数。

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

  • 文件必须与BOM一起保存为UTF-8,这是记事本在选择UTF-8时所做的。我尝试了不带BOM的UTF-8(可以在记事本+中轻松切换),但是双击文档失败。
  • 必须使用逗号或分号分隔符,但不能使用区域设置中的十进制分隔符。也许其他角色也有用,但我不知道是哪一个。
  • 必须引用包含换行符为"character"的字段。
  • 我在文本字段和记录分隔符中都使用了Windows行尾(
    ),这是有效的。
  • 您必须双击该文件才能打开它,从文本导入数据不起作用。
  • 希望这能帮助别人。


    简短回答

    删除换行符/换行符(带记事本+的
    )。Excel仍将识别回车符(
    来分隔记录。

    长回答

    如前所述,在csv字段中支持换行符,但Excel并不总是能很好地处理它们。我也遇到了类似的问题,第三方的csv可能有编码问题,但没有随着编码的变化而改进。

    对我起作用的是删除所有换行符(
    )。这会导致将字段折叠为单个记录,假设您的记录由回车和换行符(CR/LF)组合分隔。Excel随后将正确导入文件,并通过回车识别新记录。

    显然,一个更干净的解决方案是首先用临时字符组合替换真正的换行符(

    ),用所选的分隔字符(例如分号文件中的逗号)替换换行符(
    ),然后用适当的换行符替换临时字符。


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

    破碎:姓名、职务、描述"约翰","先生","我的详细描述"

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


    +关于J阿什利的评论。我也遇到了这个问题。事实证明,Excel需要:

    • 带引号的字符串中的换行符("")。

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

    例如."测试","多行项目多行项目"
    "测试2","多行项目多行项目"

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


    如果有人绊倒了这条线,并在这里寻找一个明确的答案(归功于提到libreoffice的人:

    1)安装libreoffice2)打开计算和导入文件3)我的txt文件中的字段由分隔,字符字段包含在"4)另存为ODS文件5)在Excel中打开ODS文件6)另存为.xls(x)7)完成。8)这对我很有效,节省了我很多时间!


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


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

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

    我也有类似的问题。我在MySQL中有一些twitter数据。数据中含有换行符(lf或)。我需要将MySQL数据导出到Excel中。低频干扰了我对csv文件的导入。所以我做了以下的-

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    1. From MySQL exported to CSV with Record separator as CRLF
    2. Opened the data in notepad++
    3. Replaced CRLF (

    ) with some string I am not expecting in the Data. I used ###~###! as replacement of CRLF
    4. Replaced LF (
    ) with Space
    5. Replaced ###~###! with

    , so my record separator are back.
    6. Saved and then imported into Excel

    注意-在替换CRLF或LF时,不要忘记检查excended(、
    、 …复选框[查看对话框的左侧底部)


    使用Google工作表并导入csv文件。

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


    只需创建一个带有换行符的单元格的新工作表,将其保存到csv,然后用一个可以显示行尾字符的编辑器打开它(如记事本+)。通过这样做,您会注意到单元格中的换行符是用lf编码的,"实际"行尾是用crlf编码的。喂,现在您知道如何为Excel生成"正确"的csv文件了。


    我还遇到了这个问题:即,csv文件(逗号分隔、双引号分隔的字符串)在带引号的字符串中包含lf。这些是下载的方形文件。我做了一个数据导入,但不是作为文本文件导入,而是作为"从HTML导入"。这次它忽略了引用字符串中的lf。


    这在Mac上有效,使用csv并在Excel中打开文件。

    使用python编写csv文件。

    data=''单元格A1的第一行
    单元格A1的第二行
    单元格A1的第三行","单元格B1","单元格C1的第一行
    单元格C1的第二行"单元格A2的第一行'

    file.write(数据)


    在MacOS上尝试使用数字

    如果您有权访问Mac OS,我发现Apple电子表格号码能够很好地解压Excel无法处理的复杂多行csv文件。只需打开带数字的.csv,然后导出到excel。


    在我的例子中,在记事本+中打开csv,在第一行中添加SEP=",",这样我就可以打开带有换行符的csv,在Excel中打开utf-8,而不会出现问题。


    将分隔符替换为制表符( ),而不是逗号(,)。然后在编辑器中打开文件(记事本等),复制其中的内容,然后将其粘贴到Excel文件中。


    根据csv标准,双引号内的换行符非常好。Excel中换行符的解析取决于列表分隔符的OS设置:

  • Windows:您需要将列表分隔符设置为逗号(区域和语言?格式?先进的)资料来源:https://superuser.com/questions/238944/how to force excel to open csv files with data arranged in columns answer-633302

  • Mac:需要将区域更改为我们(然后手动将其他设置更改回您的首选项)来源:https://answer s.microsoft.com/en-us/mac/forum/macoffice2016-mac excel/line-separator-comma-分号-in-excel-2016-for/7db1ba10-0300-44ba-ab9b-35d1c4059c6(参见newmanlee的答案)

  • 再次尝试之前不要忘记完全关闭Excel。

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


    在处理CSV时,Excel非常糟糕。Libreoffice做得更好。我发现:

    • 文件必须用带BOM的UTF-8编码,因此请考虑下面的所有点。
    • 到目前为止,最好的结果是从文件资源管理器打开它。
    • 如果您在Excel中打开它,有两种可能的结果:
      • 如果它只有ASCII字符,它很可能会工作
      • 如果它有非ASCII字符,它会弄乱换行符。
    • 它似乎严重依赖于操作系统的区域设置,因此您必须选择正确的设置
    • 我敢打赌,根据操作系统和办公室版本


    对于我来说,导入到Excel中的操作是以文本格式而不是csv格式完成的。米/