fixmint
ZH

如何找出电子表格两个版本之间的变化

作者: · · 阅读约 5 分钟

要找出电子表格两个版本之间的变化,需要把旧文件中的每一行与新文件中的对应行配对,然后逐个比较每组配对中的单元格。难点在于匹配。按位置逐行比较,一旦插入了行或文件重新排序,就会失效,因为之后的每一行都会和错误的对应行比较。按关键列匹配,比如订单号,即使行被移动,每一行也能与自己的记录保持配对。

对比表格找出两个文件之间的改动免费使用

为什么按行序比较会出错

按第 2 行对比第 2 行速度快,也很容易出错。在最上面加一行,之后的每一行都会和错误的行配对,结果是几百处“变化”,实际上只是一处改动。排序也会造成同样的问题。重新排序并不改变任何数据,但按位置比较会把每个移动过的行都报告为已改动。如果差异数量大得离谱,先检查行的顺序。

使用关键列

关键列用来标识一行,并且对这一行来说不会变化,例如订单号、产品编码、客户 ID。选择每个值只出现一次的列。如果关键值重复,比较时就无法判断哪一行对应哪一行,这时应换一列,或把两列组合起来作为关键。

有了关键列,每一行都会落入以下四类之一:

  • 新增。 关键值只在新文件中存在。
  • 删除。 关键值只在旧文件中存在。
  • 已修改。 关键值在两个文件中都存在,且至少有一个单元格不同。
  • 未变化。 关键值在两个文件中都存在,且所有被比较的单元格都相同。

比较两个文件可以让你选择关键列,显示每一类的数量,并列出每个已修改行中有差异的单元格。

单元格的变化,以及每次保存都会变的列

一行中可能只有三十个单元格里的一个不同,所以要看具体单元格。价格从 12.50 变成 13.00,和同一行里地址的更换是两种不同性质的变化。忽略每次保存都会变的列,比如“最后修改时间”戳,避免它们把你的列表塞满。

大小写和空格也有影响。对计算机来说,“Berlin”和“berlin ”是不同的。忽略大小写和首尾空格可以去掉这类误报,但修正拼写属于真实的变化,所以只有在这些差异对你无关紧要时才使用这些选项。

显示不同但数值相等的数字

两个单元格可能显示的文字不同,却存的是同一个值。这是最常见的误报来源:

  • 千位分隔符。 1,000 和 1000 是同一个数字。
  • 小数位数。 12.5 显示为 12.50,数值相同,只是显示方式不同。
  • 货币格式。 格式设为 £5 的单元格存的是数字 5。而直接输入带 £ 符号的文本,则不是数字。
  • 日期。 电子表格以序列号存储日期,再按所选格式显示,所以 03/04/2026 和 2026-04-03 可能是同一天。

比较工具会按电子表格的方式读取数字,读取的是 Excel 保存的值,而不是生成这些值的公式。以文本形式存储的数字会按文本比较,所以在相信某一列的比较结果之前,请先检查每列的数据类型。

计算机在大多数编程语言中以二进制存储小数,所以 0.1 + 0.2 并不精确等于 0.3。容差设置会把差值不超过你设定的某个量(例如一分钱即 0.01)的数字视为相等。

没有共同关键列时

使用你手头最稳定的一组近似组合,比如姓名加出生日期,并手动检查一批样本。如果仍然按位置比较,那么应把结果理解为“这些行在同一位置存在差异”,而不是证明了具体改动了什么。

合并与匹配:相关的两类操作

比较是问同一张表的两个版本之间有什么不同。合并是问两张不同的表如何对应起来。VLOOKUP 是最简单的合并方式:它在另一张表中查找匹配的关键值,并返回其中的一个值。大多数意外都来自两个陷阱。第一,它只查看区域的第一列,所以关键列必须位于最左边。第二,它返回找到的第一个匹配项,所以重复出现的关键值会被悄悄压缩成一行。省略最后一个参数,它还会切换为近似匹配。XLOOKUP 不需要关键列位于最左边,但每次查找仍然只返回一个匹配项。

按共同列合并两个电子表格无需公式即可完成同样的工作。在每个表中选择关键列,并选择合并方式:

  • 保留左表所有行会保留第一张表的每一行,并在存在匹配的地方添加对应列。
  • 仅保留匹配项只保留两表中都能找到的行。
  • 左表中无匹配的行列出第二张表中缺失的内容,通常是最有用的结果。

对于重复的关键值,首个匹配的行为与 VLOOKUP 相同。全部匹配会为每个匹配项增加一行,因此在右表中出现三次的客户,在结果中也会出现三次。合并前后都要数一下行数,并先检查重复项。

拼写不同的名称

当同一事物有两种写法时,精确匹配会失败,例如“Jon Smith”和“John Smith”,“Müller”和“Mueller”。模糊匹配会为一个列表中的每个名称,在另一个列表中找到最接近的名称,并给出一个分数。该分数取两种度量中的较高者。一种是按顺序比较字母,并奖励相同的开头,适合“Smith”和“Smyth”。另一种是比较词语,所以一个名称的所有词都出现在另一个名称中时,得分为 100。当一个名称多出了额外的词时,要谨慎看待 100 分。该工具会忽略重音符号和标点,并可能去掉公司后缀,如 Inc 或 Ltd。分数仍然只是估计,所以在接受配对之前,请逐一查看这些配对。

边缘情况

  • 不可见字符会让看起来相同的关键值变得不相等。如果看似相同的关键值无法匹配,请删除不可见字符。
  • 前导零在文件被电子表格打开时会消失,所以“00421”就无法与它的文本版本匹配。在合并时勾选忽略前导零,这样两种写法就会被视为同一个关键值。
  • 隐藏的列在比较时仍然会被计算在内,除非你选择忽略它们。

简明方法

  1. 在两个文件中选定一个关键列,并确认它是唯一的。
  2. 按关键列进行比较,只在差异无关紧要的情况下才开启大小写和空格规则。
  3. 忽略每次保存都会变的列。
  4. 核对总数。关键值唯一时,未变化加已修改加删除等于旧文件的行数,未变化加已修改加新增等于新文件的行数。

快速解答

为什么插入一行,所有行都被标记为已修改?

按位置比较会把每一行与同一编号的行配对,而插入操作让之后的每一行都发生了位移。改为按关键列比较即可。

为什么两个数字相同的文件却显示有变化?

这些值很可能是以文本形式存储的,或者格式不同。检查该列的数据类型。

由 AI 辅助翻译自英文原文。

评论

    还没有评论。快来抢沙发。

    你的评分(可选)

    你的邮箱不会被显示或保存。

    Open Data for AGI - Why Public, Free, and Open Datasets Matter 的封面Open Data for AGI - Why Public, Free, and Open Datasets Matter

    为什么公开、免费、开放的数据集,与算法和算力一样,将塑造通用人工智能。

    $4.99在 Gumroad 获取英文阅读