Получить строку / столбец кликаемого рисунка? - PullRequest
0 голосов
/ 20 июня 2019

Я присваиваю ячейке в каждой строке значок 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 ]

1 голос
/ 25 июня 2019

Другой ответ: вам нужно сделать 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" и проверить, для какой строки произошло изменение. Но способ, которым вы в данный момент думаете, не будет работать, потому что нет способа привязки скрипты, передающие переменную от самой кнопки. Скрипт увидит все ваши текущие кнопки как одно и то же.

1 голос
/ 24 июня 2019

Невозможно достичь именно того, что вы хотите в своем коде. Это потому, что когда вы используете функции «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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...