我为每行中的一个单元格分配一个png图标和一个带有
的脚本sheet.insertImage(blob, 11, i).assignScript("ClickMe");
在过程结束时,我有几百行,最后有按钮。我目前正在努力做的事情是确定要单击哪一行。我已经尝试过一些可能的候选人,例如
var ss = SpreadsheetApp.getActiveSheet();
var sheetName = ss.getSheetName();
var activeRange = ss.getActiveRange();
var selection = ss.getSelection();
var ar = activeRange.getA1Notation();
var cc = ss.getCurrentCell().getA1Notation();
var scr = selection.getCurrentCell().getA1Notation();
var ac = ss.getActiveCell().getA1Notation();
Logger.log("scr=%s, ar=%s, cc=%s, ac=%s", scr, ar, cc, ac);
但单击了第9行后,Logger.log说
[19-06-20 22:39:01:123 HKT] scr=A1, ar=A1, cc=A1, ac=A1
问题是这样的:如果有人单击第21行上的按钮,脚本是否可以找出单击发生在哪一行?
答案 0 :(得分:1)
无法完全在代码中实现所需的功能。这是因为当您使用函数“ getActiveRange”和“ getSelection” [1]时,它将返回正在选择的一个或多个单元格(将重点放在此单元格上)。单击插入的图像时,您不是单击单元格而是单击图像,因此焦点仍在第一个单元格中。
要获取锚定图像的单元格,可以使用以下代码段:
var image = sheet.insertImage(blob, 11, i).assignScript("ClickMe");
image.getAnchorCell().getA1Notation());
问题在于您无法在assignScript函数中传递任何参数(在这种情况下,像单元格位置一样),只能传递要运行的函数名称[2]。
可能的解决方法是调整单元格的大小以包含完整的图像。完成此操作后,请您的用户要求他们必须首先单击单元格,然后单击图像:
var image = sheet.insertImage(blob, 11, i).setHeight(20).setWidth(20).assignScript("ClickMe");
[1] https://developers.google.com/apps-script/reference/spreadsheet/range
[2] https://developers.google.com/apps-script/reference/spreadsheet/over-grid-image
答案 1 :(得分:1)
另一个答案是您需要执行21个辅助函数,
我现在想像的是什么(>绑定脚本)
Button1 > script
Button2 > script
Button3 > script
Button4 > script
function script(){
//Do something
}
相反,您需要
Button1 > scriptOne
Button2 > scriptTwo
Button3 > scriptThree
Button4 > scriptFour
具有载体功能:
function scriptOne (){script(1);}
function scriptTwo (){script(2);}
function scriptThree (){script(3);}
function scriptFour(){script(4);}
然后在脚本函数中具有该信息
function script(input){ var row = input; //Do something }
这确实很乏味,而且批量生成并不十分容易,但是如果您有固定的工作表,那可能行得通。
您还可以考虑将按钮设为复选框,然后将脚本设置为“ onEdit”,并检查更改发生在哪一行。但是您目前认为的方法行不通,因为无法绑定脚本从按钮本身传递变量。该脚本会将您当前所有的按钮视为完全相同。