Matrix 首页推荐

Matrix 是少数派的写作社区,我们主张分享真实的产品体验,有实用价值的经验与思考。我们会不定期挑选 Matrix 最优质的文章,展示来自用户的最真实的体验和观点。

文章代表作者个人观点,少数派仅对标题和排版略作修改。


一、遇到了问题

最近的工作需要管理一些台帐。这意味着我经常要同时打开若干个 Excel 表格,更新其中的内容。因此也就遇到了一个问题:当我按下 ⌘ + Z 撤消操作时,撤消的不是当前活动表格的上一步操作,而是所有打开表格的上一个操作。

如图所示,当我打开两张表格并分别操作时,在任何一张表格中的撤消列表(似乎叫「栈」比较合适)中,都按时间顺序包含了在两个表格中的全部操作,撤消是跨表格进行的。

更麻烦的地方在于,Excel 中可以撤消的操作,不仅仅是键入、修改、清除数据,如下图所示,Excel 还忠实地记录着包括缩放、自动换行、调整行高、筛选等操作。在日常工作中,许多本不涉及数据处理、仅仅是为了查看数据的操作也会留下能够撤消的记录。

于是,当我已经迷失在长得颇为相似、有着数十数百行内容的几张表格中时,注意到当前表格上次修改的内容可能有误,习惯性地轻点一个撤消,准备将一切恢复重来。突然,Excel 将我拉回到了一张陌生的表格前。原因仅仅是 6 分钟前为了看清这张表格里的某个内容,两根手指在触控屏上缩放了一下。于是,我在哪里、我本来要做什么的哲学思考,在心中炸开了。

从网上讨论(比如这里这里)来看,并不是只有我一个人遇到了这个问题。根据这个知乎回答,Excel 跨工作表撤消操作,这似乎是一个由来已久的设定,目的在于让各工作表「更方便地互相获取内存中正在编辑的数据」。翻找了我的 Excel 偏好设置,截止至目前,微软应该还没有提供将撤消功能限制于当前活动表格的选项。

天下苦微软久矣。

二、不完美的解决方案

(一)Windows 系统

在前面提到的这个回答中,已经提供了 Windows 系统下修改注册表的解决方案,这个方法与 Microsoft Learn 的这篇文章的相同。简而言之:

  • 关闭正在运行的 Excel 程序;
  • 运行(Win + R)注册表编辑器(regedit),找到 HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Excel\Options ,新建一个名为 DisableMergeInstance、值为 1 的 DWORD 键。

进行以上操作后,每次打开 Excel 应用程序,就会重新打开一个新的 Excel 实例(instance),各个实例之间不会共享撤消历史,只有同一个实例内的不同工作表才共享这些数据。

不过,既然目标是打开新的 Excel 实例,那么,其实也很容易找到不修改注册表、对其他应用程序也适用的方案:

  • 打开 Excel 程序;
  • 保持按住键盘上的 Alt 键,右键点击下方任务栏中的 Excel 图标,点击菜单中的 Excel 图标;
  • 等待提示窗口出现,询问是否启动新的 Excel 实例,点击「是」即可。
相比之下,这种方法显得更灵活一点。

需要注意的是,不管是哪种方式,都需要在分别打开的实例中再打开目标文件,在资源管理器中双击打开 Excel 表格文件时,是不会打开新 Excel 实例的。

(二)MacOS 系统

我日常工作使用的系统是 MacOS,以上方法对我并不适用。由于用户数比较少,我暂时也没有找到直接针对这个问题的解答。不过,从以上 Windows 的方案不难看出,解决方式是对于不同表格,分别打开 Excel 实例。

在此基础上,很容易找到这样一个 shell 命令「open」,参数「-n」即在应用程序已经运行的情况下,仍然打开一个新的实例。经测试发现,使用 open -n 不管是打开 Excel 程序,还是打开 Excel 表格文件,都能会打开新的实例,两个实例之间的撤消历史相互独立。

由于不可能每次打开都使用终端,很自然地想到自动操作。具体方式是:

  • 打开应用程序「自动操作(Automator)」,在弹出的新建窗口中选择「快速操作(Quick Action)」;
  • 在左侧的工具搜索「Shell」找到「运行 Shell 脚本(Run Shell Script)」并双击或将其拖至右侧窗口;
  • 在右侧窗口设置为收到「文件或文件夹(files or folders)」,位于「访达(Finder.app)」,下方传递输入修改为「作为自变量(as arguments)」,然后在下方自动生成的模板中,将 echo "$f" 这一行替换为 open -n "$f」;
  • 保存并命名,例如「新的实例」;
  • 打开访达,点击屏幕左上角的「访达(Finder)」,依次点击「服务(Services)」和「服务设置(Services Settings)」,在「文件或文件夹(files or folders)」中可以找到刚才保存的实例,点击右侧空白位置,可以为之分配快捷键。考虑到我平时打开文件使用的是 ⌘ + ↓ 的快捷键,这里我将快捷键设置为  ⇧ + ⌘ + ↓。

此后,对着需要打开的 Excel 表格文件使用上述快捷键,就可以在新的实例中打开表格。

这种方法不局限于 Excel ,其他应用程序也可以适用。对于其他应用程序而言,使用这种方法打开新实例,一个可能的意义是能够同时打开两个相同的文件。

PS. 我测试了一下,这种方法无法打开两个微信或腾讯会议,但目前可以打开两个飞书。

三、仍有问题

这并非完美的解决方案。不管是 Windows 还是 MacOS,以上方法都还存在许多问题,至少包括:

  • 打开多个实例显然会占用更多的内存;
  • 如前所述,Windows 系统下的两个方法,不适用于直接打开 Excel 表格文件,这增加了操作量;
  • 在 MacOS 中,打开多个实例时,Dock 栏中显示为多个应用程序(而在 Windows 中会层叠),这很丑;
  • 在 MacOS 中,关闭最后一个窗口时,Excel 不会自动退出(而在 Windows 中会自动退出),除非是使用 ⌘ + Q 直接退出该实例,这增加了操作量和误操作的可能性;
  • 对于不同实例的工作表,在相互引用时,用鼠标点击、框选自动填充内容的方式失效。并且,不会实时更新跨表格引用的数据,需要重新打开文件才能看到更新;
这是一个在同一实例中正常跨表格引用的例子。
  • 在不同实例之间选择性粘贴(⌃ + ⌘ + V)时,仿佛复制内容是来自非 Excel 表格一样,无法选择 Excel 表特有的粘贴选项。在选择作为「Microsoft Excel 工作表 对象」时,会显示无法粘贴的错误。
左图是在同一个实例中选择性粘贴,右图是在不同实例中选择性粘贴。
选择作为「Microsoft Excel 工作表 对象」时出现的错误提示。

考虑到微软设计时正确获取跨表格数据的初衷,用不同的实例打开不同的表格,也许还会产生别的问题。因此,比起上述临时方法,还是希望微软能够提供一个选项,让 Excel 即使在同一个实例中,也能够选择像 Word 一样,允许各个工作表独立地撤消操作。

> 下载少数派 客户端、关注 少数派小红书,感受精彩数字生活 🍃

> 实用、好用的 正版软件,少数派为你呈现 🚀