把电子表格存成 CSV 感觉上没什么伤害。文件小、到哪都打得开、数字看起来也都一样。然后一周后有人打开它,电话号码前面的零不见了、日期顺序颠倒了、每一条公式都变成了冻结的数值。
那些都不是 bug。那就是 CSV 本身。
CSV 是 comma-separated values(逗号分隔值)的缩写,而这个名字就是它的完整规格。它是一个纯文本文件,一行是一行记录,逗号把列分开。就这样。它没有为别的东西留位置,因为格式里根本没有别的东西可以留。
XLSX 是一包压缩过的 XML 文档,描述一个工作簿:多个工作表、单元格类型、公式、格式、图表、命名区域、验证规则。它从 2007 年起就是 Excel 的默认格式,而且是公开有文档的标准,所以别的电子表格程序也读写得了。
除了一张工作表上的那些值,其余全部:
=SUM(A1:A10) 的单元格,变成它当下算出来的那个数字。运算没了;改一个输入值,什么都不会更新。45.00 € 的单元格,存进去是 45。最后那一点造成了大家真正会注意到的那些失败。
开头的零不见了。一个 00123 的邮编或料号看起来像数字,所以被当成数字读,而数字没有开头的零。它变成 123。
日期被重新解读。03/04/2026 在世界大部分地方是四月三日,在美国是三月四日。CSV 没有说是哪一个;读它的程序套用自己的区域设置。
长数字变成科学计数法。一个十六位的识别码可能被显示成 1.23457E+15,而且更糟的是被四舍五入。
重音字符坏掉。CSV 不记录自己的编码。用 UTF-8 写出去、被用别的编码读进来,café 就变成 café。这是 CSV 最常见的单一抱怨。
分隔符不一定是逗号。在用逗号当小数点的地区,电子表格程序写出来的是分号。一个在德国产出的文件,用“逗号”的预期去开,整份会全部落在 A 列。
只讲到这里并不公平,因为 CSV 活下来是有好理由的。
通用。每一个数据库、编程语言、统计软件包、分析工具都读 CSV。它是“两个系统之间什么都不共享时”搬运数据的共通语言。
体积与速度。一百万行的 CSV 只有对应 XLSX 的一小部分大,而且可以一行一行流式处理,不必把整份载入内存。
透明。你可以用文本编辑器打开它,看到里面确切有什么。导入失败的时候,这一点价值非常高。
耐久。一个纯文本文件四十年后不费什么力气就还读得出来。那是一个真实的典藏论据。
用 XLSX,当这个文件是一份“人要在里面工作”的文档——任何有公式、有多张工作表、格式本身带有意义,或者同事会编辑后发回来的。
用 CSV,当这个文件是“移动中的数据”——喂给导入程序、从某个系统导出、交给一支脚本或一位统计人员。一张值的表,送去一个只要值的地方。
该问的问题是:接收它的是人还是程序?人需要那些结构;程序通常希望那些结构被剥掉。
2026-04-03——没有任何地区会读错。