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,我想你必须发布这两个版本,并建议人们检查哪个文件给出了正确的行数。
所以我收集到的所有细节都是:
),这是有效的。
希望这能帮助别人。
简短回答
删除换行符/换行符(带记事本+的
如前所述,在csv字段中支持换行符,但Excel并不总是能很好地处理它们。我也遇到了类似的问题,第三方的csv可能有编码问题,但没有随着编码的变化而改进。
对我起作用的是删除所有换行符(
显然,一个更干净的解决方案是首先用临时字符组合替换真正的换行符(
),用所选的分隔字符(例如分号文件中的逗号)替换换行符(
如果字段包含前导空格,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标准,双引号内的换行符非常好。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格式完成的。米/