每个单位总流传着一些赛博活化石,比如不知道出自哪一届前辈之手的超复杂电子表格。
最近我接手一个案件时,也遇到一个本息分期计算表,听上去好像只是小学算术级别的问题,但是利息、还款、先本后息、计息基础(因为案件跨度多年,法律和政策也在变动)等几条规则一综合,结果就是一张谁也无法理解全貌(注意是不想理解)的表格。
真正的技术问题在于单元格之间的引用。本例中,我发现有一列数据为负,现实中不存在还了“负一百块钱”这种情况,这列数据要么错了,要么只是辅助值,稍后会被纠正或有其他用处,然而,我不确定。
因为 Numbers 没有依赖检查功能(鉴于我一年接触的表格屈指可数,我不会装也不会学 Excel)。详言之,不少单元格中的数据基于其他格子计算而来,但你只能检查特定单元格引用了谁,却无法得知谁引用过当前的格子。因而,我也不确定眼前这列明显不符合实际的数据究竟有何用处(显然,我没有时间检查整个表格并尝试理解它,那我不如从头开始做)。
如果有助于你理解的话,可以把 Excel 想象成现代的卡片笔记软件,可以显示引用和被引用两层关系,但 Numbers 还处于上一代,只能显示单向的引用。当我好奇目前某列数据被用于何处时,Numbers 就力有未逮。
在不更换表格工具的前提下,我想到一种低技术的检查方式:把表格展平,将其中的公式暴露出来,然后当作纯文本处理,理论上就能找到所有引用关系。这就像笔记中的双向链接一样,原则上可以还原为简单的搜索操作。
假设在最简单的情况下,你的表格中只有一张表单(sheet),并且只有一个表(table),那么操作如下:
首先,创建一张新的临时表单,删除其中的所有内容(连同 table 一起删干净),再把原表单中的表复制过来,接着清除内容,只留空表。理论上你也可以不清空,但是残留内容可能导致部分单元格的公式显示错误,而我没有自信区分错误来自残留内容还是我手抖按错键盘。
随后,选中新表单中的整个表(快捷键 ⌘Command-A),运行文末的 AppleScript 代码,即可将原表单中的公式以纯文本形式复制到新表单中,不妨视作原表单已被展平,就像房屋已经被解构为平面图,更方便分析。
展平后的表格就是一堆文本,公式都暴露在里面,而被引用的单元格也一览无遗,如果我想知道貌似有问题的单元格是否还有特殊用途,只需搜索其座标(例如 L17),就能看到所有引用该单元格的地方。很幸运,检查之后我确信,这一列数据确实只是辅助值,并不影响最终结果。
还有一种特殊情况,即某些位置可能引用了一片区域而非单个格子,此时得另寻一款支持正则表达式的工具,搜索所有 [AZ]\d\d:[AZ]\d\d 格式的文本(区域是用起始座标表示的,前述模式的文本一般表示区域),再进一步检查。本文例子没有那么复杂,姑且不议。
顺带一提,据我所知,Mac TableEdit 可以导出带公式
