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

我正在开发一项function,将search结果导出到在Excel中打开的CSV文件。 其中一个字段是自由文本字段,可能包含换行符,逗号,引号等。为了抵消这一点,我用双引号(“)将字段包裹起来。

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

我也尝试用CR(\ r)replaceCR / LF(\ r \ n),再用LF(\ n)replace,但没有运气。

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

TIA,
-J

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

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

当我将其导入到Excel 2007中时,我最终得到了一个标题行和两个logging。 请注意,“Smith,Joe”中的逗号正在正确处理。 这只是导致问题的换行符。

希望有所帮助。

根据从文件 – >打开菜单中打开CSV文件还是通过在浏览器中双击该文件导入CSV文件,Excel(至less在XP上的Office 2007中)的行为可能有所不同。

我有一个UTF-8编码CSV文件,并在一些单元格中包含换行符。 如果我从Excel的文件 – >打开菜单中打开这个文件,popup“导入CSV”向导,文件无法正确导入:即使引用换行符,换行符也会启动一个新行。 如果我在资源pipe理器窗口中双击它打开这个文件,那么在没有向导介入的情况下它会正确打开。

我终于find了问题!

事实certificate,我们正在使用Unicode编码来编写文件,而不是ASCII或UTF-8。 改变FileStream上的编码似乎解决了这个问题。

感谢大家的所有build议!

没有任何build议的解决scheme为我工作。

什么实际工作(与任何编码):

从csv-file复制/粘贴数据(在Editor中打开),然后执行“text in columns” – >不起作用,好吧。

转到下一个选项卡并复制/粘贴(同样的东西,你已经在你的剪贴板) – >现在自动工作。

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

但是,如果你被困在Excel中,需要更好的修复,似乎有办法。 这似乎是地方依赖(这似乎愚蠢,在我的愚见)。 我没有Excel 2007,但我有Excel 2010,并给出了示例:

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

不起作用。 我在记事本中写了它,并select另存为…,旁边的保存button,您可以select编码。 我build议selectUTF-8,但没有运气。 尽pipe如此,将逗号改为分号仍然适用于我。 我没有改变任何东西,只是工作。 所以我把这个例子改成这样,并且在记事本中保存时select了UTF-8编码:

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

但有一个问题! 唯一的办法是如果你双击CSV文件在Excel中打开它。 如果我尝试从文本中导入数据并select此CSV,那么在引用的换行符上仍然失败。

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

所以,我已经能够收集到的所有细节来实现这个工作:

  1. 该文件必须保存为带有BOM的UTF-8,这是记事本在selectUTF-8时所执行的操作。 我尝试了没有BOM的UTF-8(可以在Notepad ++中轻松切换),但是双击文档失败。
  2. 您必须使用逗号或分号分隔符,而不是区域设置中的小数点分隔符。 也许其他人物工作,但我不知道哪个。
  3. 你必须引用包含换行符的字段。
  4. 我已经在文本字段中使用了Windows行结束符(\ r \ n),并且作为logging分隔符工作。
  5. 您必须双击该文件才能将其打开,从文本导入数据不起作用。

希望这有助于某人。

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

破碎:
姓名,标题,描述
“约翰”,“先生”,“我的详细描述”

加工:
姓名,标题,描述
“约翰”,“先生”,“我的详细描述”

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

  • 引用string中的换行符(“\ n”)

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

例如 “testing”,“多行项目\ n多行项目”\ r \ n“testing2”,“多行项目\ n多行项目”\ r \ n

我用记事本++来正确分隔每一行,只在string中使用换行符。 通过在空白的excel文档中创build多行条目并在记事本++中打开csv来发现这一点。

简答

删除换行符/换行符( \n用Notepad ++)。 Excel仍然会识别回车符( \r )来分隔logging。

长答案

正如上面提到的换行符在CSV字段中被支持,但是Excel并不总是处理它们。 我遇到类似的问题,第三方CSV可能有编码问题,但没有改善编码的变化。

什么对我来说是删除所有换行符( \n )。 如果您的logging是由回车符和换行符(CR / LF)组合分隔的,则这会将字段折叠为单个logging。 然后,Excel将正确导入该文件并通过回车来识别新logging。

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

粘贴到记事本++,selectANSI编码>编码,再次复制并粘贴到Excel中:)

如果有人在这个主题中磕磕绊绊,并且正在寻找一个明确的答案,那么(信任提到LibreOffice的人:

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

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

  • 您input的CSV文件的分隔符必须与您所在区域设置的列表分隔符相对应(在我的情况下)
  • 您必须双击浏览器中的文件(不要从Excel打开它)

我有一个类似的问题。 我在MySQL中有一些Twitter数据。 数据中包含换行符(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时,不要忘记检查Excended(\ n,\ r,\ t …checkbox[查看对话框的左下angular)

什么只是为我工作,导入到Excel直接提供导入完成为文本格式而不是csv格式。 M /

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

我也有这样的问题:即,用引号括起来的LF中的csv文件(逗号分隔,双引号分隔的string)。 这些被下载的Square文件。 我做了一个数据导入,而不是导入为文本文件,导入为“从HTML”。 这次它忽略了引用string中的LF。

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

使用python编写csv文件。

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

file.write(数据)