如何使 google 工作表函数引用调用它的单元格

How to make a google sheets function reference the cell it was called from

背景

我遵循了 this tutorial,它基本上使按钮调用 google 工作表脚本,如下所示

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

这会让你跳转到特定的单元格。我查看了 google 工作表 docs 但无法弄清楚如何使此函数 reference 从中调用它的单元格

问题

如何在 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));
}

活动范围是用SpreadsheetAppgetActiveRange方法得到的。这在从自定义函数调用脚本时很有用:活动范围就是自定义函数所在的单元格。示例:

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

在 sheet 中的任意位置输入 =currentcell() 将 return 该单元格的 A1 表示法。

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

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

这是一个函数,它 return 是当前行中列标记为 "id" 的单元格的内容。 (假定标签位于 sheet 的第一行。)

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');
  }
}