获取单击的图形的行/列?

时间:2019-06-20 14:40:48

标签: google-apps-script google-sheets

我为每行中的一个单元格分配一个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行上的按钮,脚本是否可以找出单击发生在哪一行?

2 个答案:

答案 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”,并检查更改发生在哪一行。但是您目前认为的方法行不通,因为无法绑定脚本从按钮本身传递变量。该脚本会将您当前所有的按钮视为完全相同。