按名称获取表格

时间:2018-02-19 13:48:44

标签: google-apps-script google-sheets

我试图让以下公式起作用:

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()更改为获取电子表格。有谁可以提供帮助?

3 个答案:

答案 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");