移动列时更新脚本单元格引用
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 函数调用。有时解决起来并不容易。
两种方法是:
- 如果事先知道 columns/cells/ranges,请使用命名范围:
Define a named range and use NamedRange in code。使用范围直接写入或查询其row/column位置。
- 另一个像您这样的基于列的范围是您的代码通过使用列 header 作为列名手动进行命名。代码使用这些名称并读取 header 来构建映射。
我们正在将大量业务逻辑迁移到幕后脚本,但我担心列移动时它们会变得更加脆弱。
开启 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 函数调用。有时解决起来并不容易。
两种方法是:
- 如果事先知道 columns/cells/ranges,请使用命名范围: Define a named range and use NamedRange in code。使用范围直接写入或查询其row/column位置。
- 另一个像您这样的基于列的范围是您的代码通过使用列 header 作为列名手动进行命名。代码使用这些名称并读取 header 来构建映射。