我试图让以下公式起作用:
function setDataValid(range, sourceRange) {
var rule = SpreadsheetApp.newDataValidation().requireValueInRange(sourceRange, true).build();
range.setDataValidation(rule);
}
function onEdit() {
var aCell = SpreadsheetApp.getActiveSheet().getActiveCell();
var aColumn = aCell.getColumn();
if (aColumn == 2 && SpreadsheetApp.getActiveSheet().getName() == 'Local' ) {
var range = SpreadsheetApp.getActiveSheet().getRange(aCell.getRow(), aColumn + 1);
var sourceRange = SpreadsheetApp.getActiveSpreadsheet().getRangeByName(aCell.getValue());
setDataValid(range, sourceRange)
}
}
调试onEdit()时,它显示setDataValid(range,sourceRange)中的sourceRange为null。由于范围在我的表格中,本地'我试图通过名称将getActiveSpreadsheet()更改为获取电子表格。有谁可以提供帮助?
答案 0 :(得分:23)
在电子表格中按名称使用获取表单:
var sheet = SpreadsheetApp.getActive().getSheetByName('Local')
答案 1 :(得分:1)
请查看声明
var sourceRange = SpreadsheetApp.getActiveSpreadsheet().getRangeByName(aCell.getValue());
这应该是返回null的那个。有关原因,请查看official documentation here。
使用var sourceRange = SpreadsheetApp.getActiveSpreadsheet().getRangeByName('Local!TaxRates')
应该获得范围。
答案 2 :(得分:0)
非常简单,只需按名称获取工作表即可,语法如下(根据文档所述)。
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Expenses");