表格数据导出格式速查表
同一张表导出成不同格式,差别不只是后缀名:有的保留数据类型,有的只剩字符串,有的能被 Excel 直接打开,有的更适合程序读取。本页对照四种常见导出格式的取舍,并把最容易出错的 CSV 转义规则逐条列出。
四种导出格式对照
| 格式 | 结构 | 类型保留 | 适用场景 | 常见坑 |
|---|---|---|---|---|
| JSON | 对象数组,键为表头 | 保留数字、布尔、null | 接口联调、前端渲染、配置导入 | 表头重复会覆盖;合并单元格会丢结构 |
| CSV | 纯文本表格,逗号分隔 | 全部退化为字符串 | 数据库导入、Excel 打开、跨平台交换 | 无类型、无编码声明,中文常乱码 |
| HTML | table / tr / td 标签 | 保留文本与合并结构 | 网页嵌入、邮件正文、富文本粘贴 | 体积大,数值仍为文本 |
| 纯文本 | 制表符或竖线分隔 | 全部为字符串 | 日志、终端粘贴、Markdown 表格 | 含分隔符的字段需转义,否则列错位 |
CSV 转义规则对照
字段里只要出现逗号、换行或双引号,就必须用双引号包裹;字段内部的双引号写成两个连续双引号。
| 情况 | 原始值 | CSV 中的写法 | 说明 |
|---|---|---|---|
| 普通字段 | apple | apple | 原样输出 |
| 含逗号 | a,b | "a,b" | 必须用双引号包裹 |
| 含换行 | line1 line2 | "line1 line2" | 引号内可保留换行 |
| 含双引号 | say "hi" | "say ""hi""" | 内部引号写成两个 |
| 首尾空格 | pad | " pad " | 加引号以保留空格 |
常见问题
CSV 到底该用逗号还是制表符分隔?
看数据内容。逗号是 RFC 4180 的标准,兼容性最好,但如果数据里本身就含逗号(地址、金额、人名很常见),就必须给字段加双引号转义,处理不当会导致列错位。制表符分隔的 TSV 在文本里出现概率低得多,适合数据含逗号多的场景,代价是不是所有工具都默认识别。稳妥做法:优先用逗号并严格做引号转义;如果下游是自己控制的程序,改用 TSV 能省掉大量转义麻烦。
Excel 打开 CSV 中文为什么乱码?
因为 CSV 本身不声明编码,Excel 会按系统默认编码去猜。在中文 Windows 上默认是 GBK,而多数程序导出的 CSV 是 UTF-8,两者不一致就乱码。三种解法:导出时带 UTF-8 BOM,Excel 见到 BOM 就会按 UTF-8 解析,这是最省事的做法;或者让下游改用「数据 → 从文本导入」并手动指定 UTF-8;再或者把文件另存为 GBK,但会牺牲其他平台的兼容性。
日期导出后变成一串数字怎么办?
这是 Excel 的存储机制导致的:日期在内部就是一个从 1900-01-01 起算的序列号,显示成什么样完全取决于单元格格式。导出 CSV 时格式信息会丢失,只剩下序列号。解法是在导出前把日期列设置成文本格式,或者用 TEXT 函数先转成 yyyy-mm-dd 这样的字符串;如果导出 JSON,则要在工具侧识别日期格式并输出 ISO 8601 字符串,而不是原样取内部数值。
大表格导出很卡甚至失败,怎么处理?
瓶颈通常在浏览器内存而不是计算本身。一个 10 万行的表在解析成对象数组后,内存占用可能是原始文件的几倍,加上字符串拼接很容易触顶。实用做法:先按业务需要裁剪列和行,不要全量导出;超过几万行时改用服务端脚本处理;如果只是要给下游程序用,优先选 CSV 而不是 JSON 或 HTML,前者的内存开销和体积都小一个量级。