系统导出时让你选 CSV 还是 Excel,很多人随手点一个;结果 CSV 打开后日期变成了文本、号码前面少了个 0、多出来的三个表全不见了。这些不是 bug——CSV 和 Excel 根本不是同一类东西。
一句话概括:CSV 是一段用逗号分隔的纯文字;Excel(.xlsx)是一个能装格式、公式和多张表的工作簿。 拿 CSV 当 Excel 用,一定会丢东西。
六个维度的实际差异
1. 文件本质。 CSV 就是 .txt,用记事本打开能看到全部内容,一行一条记录、字段间用逗号分隔。xlsx 是一个 ZIP 压缩包,里面是 XML 和数据表——改扩展名成 .zip 解开能看到内部结构。
2. 公式。 CSV 完全没有公式,保存时只留计算结果。你算好的一列 =A2*B2 存成 CSV 后只剩数字,改不了也追不回。
3. 格式。 字体、颜色、边框、合并单元格、条件格式、列宽——CSV 一个都不存。它能保留的最"格式"的东西,是换行和分隔符。
4. 多个工作表。 CSV 只能有一张表。导出 CSV 时,除当前活动表外的所有 Sheet 会被直接丢弃,且不警告。这是最惨烈的一个差异,见 多工作表合并导出 里对多表处理的说明。
5. 数据类型。 CSV 里所有值都是字符串。是数字、日期还是文本,由打开它的那个软件现场猜——这就是下一节那些怪事的根源。
6. 体积与通用性。 CSV 小得多、任何语言任何系统都能读写、Excel 打不开的概率为零。这是它作为"系统之间交换数据"的通用货币的原因,而不是给人看的原因。
CSV 打开后最典型的四个坑
坑一:长数字变成科学计数法。 18 位身份证号、银行卡号打开后变成 1.23E+17,双击单元格会发现末尾几位已被改成 0。这不是显示问题,是 Excel 把它按双精度数字解析后真丢了精度。
解法:不要双击打开。用 数据 → 从文本/CSV 导入,在向导里把该列指定为"文本"。或者用记事本打开确认原文是否完好。
坑二:开头的 0 消失。 "007""0571" 变成 7、571。同为按数字解析导致。给对方的编号、行政区划代码、银行卡号会因此错。解法同上——按文本列导入。
坑三:日期变成一串看不懂的东西。 CSV 里的 2026/1/5 在英文系统 Excel 里可能解析成 1 月 5 日、也可能按"日/月"读成 5 月 1 日。CSV 里没有日期类型,只有字符串,解释全凭区域设置。跨年数据合并时这类错位最难查。
坑四:字段里含逗号导致串行。 CSV 的分隔符就是逗号,一旦某条备注里出现逗号,且导出时没有用引号把该字段包起来,这一行就会被切成多列,右边所有数据整体错位。
判断方法:用记事本打开看那几行有没有被 "..." 包住。规范的导出工具一定会加引号,不规范的自制导出接口经常漏。这是数据方的 bug,你这边修不好,只能要求对方重新导出。
什么时候该选哪个
用 CSV:给另一个系统导入(ERP、CRM、建站后台、数据库)、跨软件交换、程序处理、要归档成"人能看懂的原始数据"、xlsx 打不开的应急。
用 xlsx:要给人看、要有公式、要多张表、要格式化(金额千分位、日期格式、颜色标注)、要做筛选透视分析。
要发给别人看、又不想对方改 → 两个都不是最终形态,转成 PDF 交付:Excel 转 PDF。宽表打印被截断的处理见 Excel 打印列被裁掉。
顺带:CSV、TSV、TXT 是什么关系
同一族的分隔符文本,只是分隔字符不同:
- CSV:逗号(英文环境默认)
- TSV:制表符 Tab。好处是字段里有逗号也不怕,从 Excel 复制出来粘进记事本,得到的就是 TSV 形态
- TXT:没有约定,可能用空格、竖线、分号任意分隔
中文环境的一个历史坑:Windows 中文版曾按系统区域设置把"CSV"解析成分号分隔(欧洲部分地区也是),同一个 .csv 在中文系统和英文系统里被切成不同的列。所以看到"导入后列数不对",先检查分隔符到底是什么。
三条保命建议
- 导出前先另存一份 xlsx 母本。 CSV 是"输出口"不是"存档口",公式和格式回不来
- 含编号、证件号、电话的数据,走导入向导按文本列读,别双击打开
- 收到 CSV 先记事本看一眼再决定怎么用:能立刻看出分隔符是什么、有没有引号、中文是否乱码
乱码是这套问题里最高频的一个,单独写在 CSV 打开中文乱码怎么修。