CSV 导入错列或乱码:分隔符、引号、表头与前导零
排查 CSV 整行进入一个单元格、部分记录错列和编号变化的问题。通过带引号字段的示例核对分隔符、表头和目标软件导入设置。
看起来像表格,不一定解析成表格
CSV 是带有分隔规则的文本。整行挤进一个单元格,通常值得先检查分隔符;某几行突然错列,则需要检查引号和字段里的换行,而不是马上手动移动单元格。
字段内容本身也可以包含逗号。直接用查找替换把所有逗号改成分号,会同时改掉这些数据。分隔符转换应按照 CSV 结构读取和重新输出。
表头决定了后续字段怎么命名
把 CSV 转成 JSON 时,表头通常会成为对象字段名。重复、空白或不一致的表头会让后续映射变得不明确,适合在转换前处理。
邮编、订单号和带前导零的编号看起来像数字,但经常应该当作文本。Neatbo 的 CSV 转 JSON 保留数字字符串为文本;导入其他软件后,仍需检查对方有没有自动转成数字或日期。
去重之前,先定义什么叫同一条记录
两行姓名相同,不一定是同一个人;同一订单有多个商品,也不代表重复订单。选择去重依据前,应先确定数据中的业务标识和需要保留的记录。
先用一小段样本检查,再处理完整表格。记录输入与输出行数,可以帮助发现过度去重,但行数合理也不能单独证明结果正确。
整理格式与消除风险是两件事
更换分隔符或转成 JSON,不等于自动删除公式。把内容导入电子表格时,以等号等字符开头的单元格可能被解释为公式,分享来自不可信来源的数据前应检查目标软件的处理方式。
最终核对表头、含引号的单元格、前导零和代表性记录,并在目标软件中试导入。保留原始 CSV,避免仅剩一份经过多轮修补的数据。
字段里面的逗号仍然是数据
在下面的样例中,“Portland, OR”是一个完整城市字段;备注中的连续双引号表示字段内的引号。结构化解析器可以保留这些区别,全局文本替换却无法判断哪些逗号是列分隔符。
解析后检查两条记录是否都有相同的三列。编号 00123 应作为文本而不是数字 123;如果目标软件自动改写了它,应调整导入设置,或选择能够明确写入字符串单元格的格式,而不是事后只修正显示效果。
去重是另一项独立的业务决策。“订单编号加行项目号”可能比单独的订单编号更适合标识一行。应记录匹配规则并抽查被移除的数据,避免表格看起来更整齐,却悄悄丢失真实记录。
| 现象 | 优先考虑 | 验证方法 |
|---|---|---|
| 每行都在一个单元格 | 分隔符不匹配 | 对照源文件与导入设置 |
| 只有部分行错列 | 引号或字段内换行 | 查看受影响的原始记录 |
| 编号丢失前导零 | 自动数字转换 | 把该列按文本导入 |
| 多条记录消失 | 去重条件过宽 | 复核用于匹配的列 |
id,city,note
00123,"Portland, OR","He said ""hello"""
00456,Taipei,review完成前的检查清单
- 转换分隔符或筛选之前保留副本。
- 核对表头、记录数和有代表性的带引号字段。
- 区分空字符串和业务上缺失的值。
- 结构正确之外,还要单独检查公式样式的内容。
参考资料
- RFC 4180:CSV 格式
提供常见分隔符与引号规则的参考;电子表格导入行为可能不同。