移动列时更新脚本单元格引用

Update script cell references when columns are moved

我们正在将大量业务逻辑迁移到幕后脚本,但我担心列移动时它们会变得更加脆弱。

开启 Sheet 自动更新

例如,如果我有一个价差公式sheet,如下所示:

=If(A1=5,"Yes","No")

然后我在 A 的左侧插入 1 列,公式将自动更新如下:

=If(B1=5,"Yes","No")

Apps 脚本不更新

例如,如果我在脚本部分有公式:

function myFunction() {
   var value = SpreadsheetApp.getActiveSheet().getRange("A1").getValue();
   var output = (value == 5) ? 'Yes' : 'No';
   Logger.log(output);
}

sheet改变时不会更新。

:如何在代码中为可能移动的列获取稳定的引用?

这是在代码中对字符串或数字进行硬编码时的常见问题。

一般来说,javascript 解析器无法判断哪些字符串可能被用于 sheet 函数调用。有时解决起来并不容易。

两种方法是:

  1. 如果事先知道 columns/cells/ranges,请使用命名范围: Define a named range and use NamedRange in code。使用范围直接写入或查询其row/column位置。
  2. 另一个像您这样的基于列的范围是您的代码通过使用列 header 作为列名手动进行命名。代码使用这些名称并读取 header 来构建映射。