对比两份表格导出,看清到底改了什么
按一个关键列对比两份表格导出文件,得到新增、删除和修改的精确数量——还包括一条给超大文件用的对比路线。
为什么要这样做
“这周导出的和上周比,到底改了什么?“这个问题问起来容易,靠肉眼回答却 很慢——把两份表格并排滚动查看,能发现明显的差异,却会漏掉安静的那些, 比如某个价格变了一分钱,或者上千行里只有一行的状态被改了。价格表、库 存导出、会员名单:任何定期重新导出的文件,迟早都会需要这个检查,而要 做得可靠,就得按真正能识别一行的东西来配对,而不是按它碰巧所在的那一 行。
怎么做,用对应的工具
CSV 对比会按一个关键列匹配两份文件,精确报告新增、删除和修改了什 么。当你真正需要的是把两份文件合并成一份、而不是一份变更报告时,该换 成用 CSV 关联。
- 选择两份文件。 把较旧的版本放进 A 框,较新的放进 B 框。
- 选择关键列。“关键列”下拉菜单只会列出两份文件共有的表头——选择 能唯一识别一行的那个,比如产品编号、邮箱或订单号。行是按这个值来配 对的,而不是按所在的行号,所以即便行顺序被打乱,也能正确对比。
- 运行对比。 点击对比,得到两份文件之间新增、删除、 修改行的数量。
- 导出差异。 点击“导出差异 (CSV)”,把这些行保存成一个文件,每一 行都在 “change” 列里标注为新增、删除或修改——这样你能看到实际的差 异,而不只是数字。
如果你需要的不是这个——而是按一个共同的列把两份文件合并成一份,而不是 对比它们——CSV 关联可以在两侧各选一列作为匹配列,然后让你选择只保 留匹配的行、保留第一份文件的所有行,或只保留第一份文件里没匹配上的 行,导出时还会给出匹配和未匹配行的精确数量。
需要注意的地方
选错关键列,得到的对比结果就没有意义。 关键列必须在两份文件里指向 同一个真实事物——产品编号或邮箱可以,因为它们在不同导出之间不会变;像 “价格”或“状态”这样的列不行,因为把它当关键列会变成按价格配对行,而不 是按它们描述的是哪个产品配对。如果你选的关键列里,某个值在一份文件里 出现了不止一次,页面内的对比只会保留携带该值的最后一行,也就是说一个 不唯一的关键列,会在计数里悄悄丢掉更早的那些重复项。
空单元格和缺失值不完全是一回事,工具对两者的处理都很明确。 空单元 格仍然算作一个真实的值——即空字符串““——会正常地和另一个空单元格或有 内容的单元格比较。CSV 对比报告为修改的,是内容在两份文件之间确实 发生变化的单元格,这也包括从空变为有内容、或从有内容变为空的单元格—— 这是一个真实的、值得报告的变化,工具不会仅仅因为某一侧是空的就悄悄忽 略它。
CSV 和 TSV 文件没有固定的大小上限——Excel 和 JSON 文件有。 25 MB 以内,两份文件会直接在页面里对比。超过之后,专门针对 CSV 或 TSV,CSV 对比会提供一个设备本地的数据库引擎:一次性下载约 7 MB,之后保留在你 的设备上,从磁盘读取文件,而不是把它们整个加载进内存。这是可选的——是 否下载由你决定——而且不管走哪条路线,两份文件的任何内容都不会被上传到 任何地方。Excel(.xlsx/.xls)和 JSON 文件无论如何仍然限制在各 25 MB 以 内,因为这个大文件引擎读不了这两种格式。
常见问题
应该用哪一列作为关键列?
任何能唯一识别一行、且在不同导出之间保持不变的值——产品编号、订单号、 邮箱都可以。避免选一个预期会变化的列(比如价格或状态),因为那恰恰是 你想让对比检测出来的东西,而不是你想用来配对行的东西。
我的文件超过 25 MB,还能对比吗?
可以,如果是 CSV 或 TSV:CSV 对比会提供一次性下载、约 7 MB 的引擎,让 它能从磁盘读取任意大小的文件,而不是把它们加载进内存。只有你选择下载 它时才会下载,两份文件也永远不会被上传——对比仍然完全在你的设备上运 行。Excel 和 JSON 文件仍然限制在 25 MB,因为这个引擎读不了这两种格 式。
空单元格如果变成有内容,算不算一次修改?
算。空单元格会被当作一个真实的(空的)值处理,所以一个单元格从旧文件 里的空,变成新文件里有内容——或者反过来——都会被报告为一行修改, 不会仅仅因为某一侧原本什么都没有就被跳过。