在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议人们检查哪个文件提供了正确的行数。
所以,我已经能够收集到的所有细节来实现这个工作:
- 该文件必须保存为带有BOM的UTF-8,这是记事本在selectUTF-8时所执行的操作。 我尝试了没有BOM的UTF-8(可以在Notepad ++中轻松切换),但是双击文档失败。
- 您必须使用逗号或分号分隔符,而不是区域设置中的小数点分隔符。 也许其他人物工作,但我不知道哪个。
- 你必须引用包含换行符的字段。
- 我已经在文本字段中使用了Windows行结束符(\ r \ n),并且作为logging分隔符工作。
- 您必须双击该文件才能将其打开,从文本导入数据不起作用。
希望这有助于某人。
如果该字段包含前导空格,则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(数据)