CSV用Excel打开全挤在一列?原因和解决方法
如果 CSV 打开后所有内容都挤在 A 列,说明文件使用的分隔符和 Excel 预期的不一样——通常是逗号分隔的文件在设置为分号的电脑上打开,或者反过来。数据本身没有任何问题。用能自动识别分隔符的工具打开它,比如 CSV 查看器;或者通过 Excel 的导入功能或“分列”功能,告诉 Excel 该用哪种分隔符。
逗号、分号和小数逗号
“CSV”是 comma-separated values(逗号分隔值)的缩写,但实际上,分隔符是由生成文件的程序决定的。下面是同一行数据的两种写法:
日期,客户,金额
2024-03-15,Müller GmbH,1250.50
日期;客户;金额
2024-03-15;Müller GmbH;1250,50
第二种写法的原因在于小数点。欧洲很多国家——德国、法国、意大利、西班牙、荷兰、波兰、乌克兰等等——书写数字时用逗号作小数点:1250,50。如果逗号同时还用来分隔列,1250,50 就会被拆成两个单元格。所以这些地区的表格软件改用分号作为列分隔符。
两种格式都没有错,只是两种不同的惯例。麻烦在于:用一种惯例写的文件,被期待另一种惯例的程序打开。想进一步了解这种格式,请看 CSV 文件是什么。
为什么 Excel 把所有内容放进 A 列
双击 .csv 文件时,Excel 并不会分析文件来判断分隔符,而是使用操作系统区域设置中的列表分隔符。在 Windows 上,这个设置跟随你的区域:设置为使用小数逗号的国家时,列表分隔符通常是分号;设置为中国、美国或英国时,则是逗号。
所以冲突在两个方向上都会发生:
- 德国或法国的合作伙伴发来一份分号分隔的导出文件;你的 Excel 期待逗号,于是每一行都整行留在 A 列,显示成
日期;客户;金额这样。 - 你的系统导出了逗号分隔的文件;欧洲的同事用德语或法语版 Excel 打开,每一行同样挤在 A 列里。
网络服务、网店和 CRM 导出的文件也是同样的道理。很多服务不管你在哪里都只用逗号,这也是欧洲用户经常遇到这个问题的原因。还有一个相关的问题——文字变成 é 之类的符号——那是编码问题,而不是分隔符问题,请看 CSV 文件出现乱码。
方法 1:用能自动识别分隔符的工具打开
如果你只是要看看文件内容——核对订单、查找客户、看看导出了什么——最快的办法是使用能自己判断分隔符的查看器。
Opener 的 CSV 查看器会分析文件,识别它是用逗号、分号、制表符还是竖线分隔的,然后显示成一张规整的表格。它还会识别文本编码(UTF-8、Windows-1251 或 Windows-1252),并能正确处理包含分隔符的带引号值,比如 "Smith, John"。无需任何设置,无需账号,文件留在你的浏览器中,绝不会上传。你可以搜索、排序,并把结果导出为 CSV 或 JSON。
方法 2:使用 Excel 的导入或“分列”功能
如果要在 Excel 里处理这些数据,不要双击打开,而是告诉 Excel 用哪种分隔符。
从文本/CSV 导入。 新建一个空白工作簿,打开“数据”选项卡,选择“从文本/CSV”。Excel 会显示预览,其中有一个分隔符列表;在逗号和分号之间切换,直到各列显示正确,再加载数据。如果文字显示成乱码,也可以在同一个预览窗口中设置文件编码。
分列。 如果数据已经堆在 A 列里:
- 选中 A 列。
- 在“数据”选项卡中选择分列。
- 选择分隔符号,然后勾选文件实际使用的分隔符(比如分号或逗号)。
- 完成向导。
这两种方法都要注意一点:数字格式。包含 1250.50 的文件在使用小数逗号的系统上打开(或者包含 1250,50 的文件在使用小数点的系统上打开)时,金额可能被当成文本,或者被读成错误的数字。导入预览和分列向导的最后一步都可以设置各列的识别方式——在依赖合计之前,先核对几个金额。
方法 3:为 Excel 加一行“sep=”
有一个只对 Excel 有效的小技巧:在文件最顶部加一行,注明分隔符。
sep=;
日期;客户;金额
2024-03-15;Müller GmbH;1250,50
用纯文本编辑器打开文件,在第一行加上 sep=;(逗号分隔的文件则加 sep=,),保存,然后再双击打开。Excel 会读取这个提示、使用对应的分隔符,并且不会显示这一行本身。
这只是变通办法,不是标准。其他程序——Google 表格、LibreOffice、数据库、脚本——并不认识 sep=,通常会把它显示为多出来的第一行,或者当成表头。只在文件只给 Excel 用户使用时才用这个方法。
方法 4:Google 表格、LibreOffice 或区域设置
Google 表格。 使用“文件”→“导入”并上传 CSV。导入对话框中有分隔符类型选项,你可以保留自动检测,也可以自己选择分隔符,包括自定义字符。
LibreOffice Calc。 打开 CSV 时,LibreOffice 会显示文本导入对话框,里面有逗号、分号、制表符和其他分隔符的复选框,还有实时预览。它在 Windows、macOS 和 Linux 上都免费。
修改 Windows 的列表分隔符。 在经典控制面板的区域设置中,“其他设置”里有一个列表分隔符字段。把它改成逗号,Excel 双击就能直接打开逗号分隔的文件;改成分号,则能直接打开分号分隔的文件。请谨慎使用:这是系统级设置,它也会改变 Excel 公式中函数参数的分隔方式,以及其他程序读写 CSV 文件的方式。如果你和国内同事互传文件,他们也会开始收到你用新分隔符保存的文件。对大多数人来说,上面的导入方法更稳妥。
常见问题
为什么同一个 CSV 在同事的电脑上打开就正常?
他的区域设置使用了不同的列表分隔符。双击 CSV 时,Excel 会使用这个设置,所以同一个文件可能在一台电脑上正常打开,在另一台电脑上却全挤在一列。
保存 CSV 文件时,应该用逗号还是分号?
取决于谁来打开。对其他程序、脚本和国际同事来说,逗号是通用的默认选择。对使用小数逗号国家的 Excel 用户来说,分号可以直接打开。如果可以,问问接收方。
为什么有些行的列数还是不对?
通常是因为某个值本身包含分隔符,比如公司名称里有逗号,却没有用引号括起来。遵循 CSV 引号规则的查看器和导入工具能正确处理带引号的值;没有引号的值需要在源头修正。
CSV 查看器支持制表符分隔和竖线分隔的文件吗?
支持。CSV 查看器会自动识别逗号、分号、制表符和竖线,并能打开 .csv、.tsv 和 .txt 文件。