我有一个 csv 文件(逗号分隔并加引号)。当直接从资源管理器打开 csv 文件时,excel 可以正确解释多行单元格,但它会弄乱字符编码(utf-8)。
因此我必须使用导入功能(数据/获取外部数据/从文本)。但是,当我在 excel 中使用导入文本功能(我可以在其中明确设置文件编码)时,它会将换行符解释为新行的开始,而不是将多行文本放入单个单元格中,从而破坏文件布局。
我可以通过以下方式克服这种情况吗
- 强制 explorer open 命令使用
65001: Unicode (UTF-8)
编码 - 强制文本导入向导忽略引用的换行符作为记录分隔符
答案1
使用 LibreOffice 打开文件,然后以所需格式保存:当我尝试使用 Excel 2010 读取 UTF-8 MySQL 数据时,遇到了与您描述的完全相同的问题,这些数据在某些字段中有多行日语文本,导出为引用的 CSV,并使用 \r\n 作为记录结尾(尝试了 \r 和 \n,Excel 的行为没有区别)。LibreOffice 4.1.3 正确导入了 CSV 文件,我可以将其保存为 Excel 2010 xlsx 格式,然后在 Excel 中正确打开 xlsx 文件。
答案2
您所要求的是不可能的。唯一真正的解决方案是 Microsoft 采取以下任一措施:
- 创建一个设置,允许用户在打开 CSV 文件时指定其默认编码
- 修复文本导入向导中的错误,以便它正确处理多行值
然而还是有一些解决方法。
我的最爱:
- 在能够理解编码的文本编辑器中打开你的 csv(例如 sublime、notepad++ 等)
- 打开新的 Excel 工作簿
- 复制 csv 的全部内容,然后粘贴到单元格 A1 中
- Excel 自动执行正确的事情(编码 + 换行符)
其他解决方法不太优雅并且依赖于操作文件:
要使用文本导入向导,您必须从 CSV 文件中删除所有换行符。如果您以编程方式创建文件,则可以对其进行编辑以省略换行符;如果您从其他地方收到文件,则编写 Python 脚本以删除换行符将很简单。
要使用标准方法打开文件(例如双击),您应该将其转码为 Excel 首选的默认编码。如果您可以控制文件的创建(或要求创建者使用所需的编码创建文件),那么这很容易。否则,python 解决方案很简单,但又需要更多工作
(提示:您可以通过打开文本导入向导并查看预选选项来了解 Excel 需要哪种编码)
最终,这取决于您接收/创建这些文件的频率,解决此问题的最佳方法是使用 Excel 期望的默认编码创建文件,这样您只需双击即可打开。
Stack Overflow 上的相关帖子: https://stackoverflow.com/questions/2668678/importing-csv-with-line-breaks-in-excel-2007
答案3
另一个技巧是通过查询导入。尝试选择数据 > 新查询 > 来自文件 > 来自 CSV。创建一个新选项卡或找到一个位置让它填充。这种方法的一个优点是您可以在前端进行一些格式化、切片和切块。
查询工具具有忽略引号中的换行符的功能;而普通的“来自文本”导入似乎缺少此功能。想想看,这是微软的功劳。
答案4
- 打开您的 CSV 文件和新的 Excel 文件。
- 复制 CSV 单元格中的所有内容(Ctrl+A然后Ctrl+ C)。
- 移动到新的 excel 文件;将内容粘贴到空的 Excel 文件 ( Ctrl+ V) 中。