如何使谷歌工作表功能参考从它调用的单元格

时间:2016-06-03 06:51:25

标签: javascript google-apps-script google-sheets google-spreadsheet-api

背景

我跟着this tutorial,基本上按下这个按钮调用google sheet脚本

function jumpToDetail() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("details");
  ss.setActiveSheet(sheet).setActiveSelection("A2");
}

使您跳转到特定单元格。我查看了Google工作表docs,但无法弄清楚如何使这个函数引用

调用它的单元格

问题

如何在google工作表中创建一个函数来引用它所调用的函数。例如,我希望最终的代码看起来像这样:

function jumpToDetail(clickedCell) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("details");
  // get the value of "id" of the same row the cell was clicked in
  ss.setActiveSheet(sheet).setActiveSelection(function_of(id));
}

1 个答案:

答案 0 :(得分:1)

使用getActiveRange SpreadsheetApp方法获取有效范围。从自定义函数调用脚本时,这非常有用:活动范围是自定义函数所在的单元格。示例:

function currentCell() {
  return SpreadsheetApp.getActiveRange().getA1Notation();
}

在工作表中的任何位置输入=currentcell()将返回该单元格的A1表示法。

但是单击按钮(插入的图形)对活动范围没有影响,因为图纸不与工作表中的任何单元格相关联。它们位于自己的层中,漂浮在工作表上。在使用按钮调用的脚本中,活动范围是所选单元恰好位于的位置,与按钮的位置无关。

为了将某些位置传达给脚本,用户必须先选择一个单元格然后再调用脚本(通过按钮或菜单)。

这是一个函数,它返回当前行中带有标记为“id”的列的单元格内容。 (假设标签位于工作表的第1行。)

function getId() {
  var row = SpreadsheetApp.getActiveRange().getRow();
  var sheet = SpreadsheetApp.getActiveSheet();
  var headers = sheet.getRange(1, 1, 1, sheet.getLastColumn()).getValues();
  var column = headers[0].indexOf('id') + 1;
  if (column > 0) {
    return sheet.getRange(row, column).getValue();
  }
  else {
    throw new Error('No column labeled id');
  }
}