如何使 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));
}
活动范围是用SpreadsheetApp
的getActiveRange
方法得到的。这在从自定义函数调用脚本时很有用:活动范围就是自定义函数所在的单元格。示例:
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');
}
}
背景
我遵循了 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));
}
活动范围是用SpreadsheetApp
的getActiveRange
方法得到的。这在从自定义函数调用脚本时很有用:活动范围就是自定义函数所在的单元格。示例:
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');
}
}