jer*_*lan 110 csv excel newline excel-2007
我正在开发一项功能,将搜索结果导出到CSV文件,以便在Excel中打开.其中一个字段是一个自由文本字段,可能包含换行符,逗号,引号等.为了抵消这一点,我将字段用双引号(")包装.
但是,当我将数据导入Excel 2007时,设置适当的分隔符,并将文本限定符设置为双引号,换行符仍然在换行符处创建新记录,我希望在其中看到整个文本字段单细胞.
我也尝试用CR(\ r)替换CR/LF(\ r \n),再用LF(\n)替换,但没有运气.
有没有其他人遇到过这种行为,如果有,你是如何解决的?
TIA,
-J
编辑:
这是我用手写的复制问题的快速文件.
ID,名称,描述
"12345","史密斯,乔","嘿.
我的名字是乔."
当我将其导入Excel 2007时,我最终得到一个标题行和两个记录.请注意,"Smith,Joe"中的逗号正在正确处理.这只是造成问题的换行符.
J A*_*ley 46
Excel(至少在Office 2007 on XP中)的行为可能有所不同,具体取决于是否通过从文件 - >打开菜单打开CSV文件或通过在资源管理器中双击文件来导入CSV文件.
我有一个UTF-8编码的CSV文件,并在某些单元格中包含换行符.如果我从Excel的文件 - >打开菜单中打开此文件,则会弹出"导入CSV"向导,并且无法正确导入文件:即使引用,换行也会启动新行.如果我在资源管理器窗口中双击打开此文件,则无需向导干预即可正确打开.
小智 32
没有一个建议的解决方案适合我.
什么工作(使用任何编码):
从csv文件复制/粘贴数据(在编辑器中打开),然后执行"列中的文本" - >不能正常工作.
转到下一个选项卡并再次复制/粘贴(与剪贴板中已有的相同) - >现在自动运行.
ket*_*til 25
如果您手动执行此操作,请下载LibreOffice并使用LibreOffice Calc导入CSV.它比我试过的任何版本的Excel做得好得多,如果你之后需要转移到Excel,它可以根据需要保存到XLS或XLSX.
但是,如果你坚持使用Excel并需要更好的修复,那么似乎有办法.它似乎依赖于语言环境(在我的拙见中,这似乎是愚蠢的).我没有Excel 2007,但我有Excel 2010,并给出了示例:
ID,Name,Description
"12345","Smith, Joe","Hey.
My name is Joe."
Run Code Online (Sandbox Code Playgroud)
不起作用.我在记事本中写了它并选择了另存为...,然后在"保存"按钮旁边可以选择编码.我按照建议选择了UTF-8,但没有运气.但是,将逗号更改为分号对我有用.我没有改变任何其他东西,它只是起作用.所以我将示例更改为这样,并在记事本中保存时选择了UTF-8编码:
ID;Name;Description
"12345";"Smith, Joe";"Hey.
My name is Joe."
Run Code Online (Sandbox Code Playgroud)
但有一个问题!它的唯一工作方式是双击CSV文件在Excel中打开它.如果我尝试从文本导入数据并选择此CSV,则它仍然会在引用的换行符上失败.
但还有另一个问题!工作字段分隔符(原始示例中的逗号,在我的示例中为分号)似乎取决于系统的区域设置(在控制面板 - >区域和语言下设置).在挪威,逗号是小数点分隔符.Excel似乎避免使用此字符,而更喜欢使用分号.我可以访问另一台设置为英国英语语言环境的计算机,并且在该计算机上,第一个带逗号分隔符的示例工作正常(仅在双击时),而带分号的那个实际上失败了!互操作性如此之多.如果您想在线发布此CSV并且用户可能拥有Excel,我猜您必须发布这两个版本并建议人们检查哪个文件提供正确的行数.
所以我能够收集到的所有细节都是:
希望这有助于某人.
jer*_*lan 24
我终于找到了问题!
事实证明我们使用Unicode编码而不是ASCII或UTF-8编写文件.更改FileStream上的编码似乎可以解决问题.
谢谢大家的所有建议!
使用以下步骤可以使用 Power Query 在 Excel 版本中轻松导入多行 CSV(在 Excel 365 版本 2207 中测试):
删除换行符/换行符(\n使用Notepad ++).Excel仍会识别回车符(\n \r)以分隔记录.
如上所述,CSV字段中支持换行符,但Excel并不总是正常处理它们.我遇到了类似的问题,第三方CSV可能存在编码问题,但编码更改没有改善.
对我有用的是删除所有换行符(\n).这具有将字段折叠到单个记录的效果,假设您的记录由回车符和换行符(CR/LF)的组合分隔.然后,Excel将正确导入文件并通过回车识别新记录.
显然,一个更清晰的解决方案是首先用\r\n临时字符组合替换真正的换行符(),\n用您选择的分隔符(例如分号文件中的逗号)替换换行符(),然后再用适当的换行符替换临时字符.
小智 5
如果该字段包含前导空格,则Excel会将双引号忽略为文本限定符.解决方案是消除逗号(字段分隔符)和双引号之间的前导空格.例如:
破碎:
名称,标题,描述
"约翰","先生","我的详细描述"
工作:
姓名,职务,描述
"约翰","先生","我的详细说明"
| 归档时间: |
|
| 查看次数: |
159395 次 |
| 最近记录: |