Скрипт запуска ячейки электронной таблицы Google, затем скрипт возвращает значение

У меня есть проект, в котором в одной электронной таблице у меня будет какой-то массив, подобный этому, для каждой строки.

[имя пользователя, раскрывающийся список, веб-сайт, раскрывающийся список, кнопка для запуска скрипта, returnValueByScript1, returnValueByScript2]

Итак, в электронной таблице Google есть сценарий, который должен прочитать 2 значения, затем перейти к вызову API, который возвращает некоторые данные, произвести некоторые вычисления с этими данными, а затем вернуть 2 значения в массив (returnValueByScript1, returnValueByScript2).

Ядро сценария я успешно выполнил, теперь мне нужно знать, возможно ли в электронных таблицах Google иметь несколько строк однотипных массивов (например, [A2, B2, C2, D2, E2, F2, G2] , [A3, B3, C3, D3, E3, F3, G3] и т. Д.), Чтобы иметь какую-то кнопку, которая запускает сценарий, и сценарий обнаруживает строку, в которой он был запущен, и считывает аргументы из ячеек соответствующая строка и экспортирует аргументы в ячейки соответствующей строки. Например, я запускаю что-то на E5, скрипт знает, что я запустил из строки 5, читает C5, D5, делает что-то, а затем записывает на F5, G5.

Если возможно, какие функции мне следует искать.


person Harmonica1337    schedule 27.03.2018    source источник
comment
developers.google.com/apps-script/guides/triggers Возможно, вы хотите function myFunctionWithAnInstalledOnEditTrigger(e), а не function onEdit(e), если вам нужно получить доступ к вещам, которые не доступны анонимно, или если ваш скрипт запускается дольше 30 секунд. Есть много способов сделать так, чтобы функция при редактировании делала ____ здесь, на SO, так что убедитесь, что вы проявили должную осмотрительность :)   -  person tehhowch    schedule 28.03.2018
comment
Привет, tehhowch, функция onEdit (e) творит чудеса, и это правильная функция, но я столкнулся с такой проблемой stackoverflow.com/questions/49120632/   -  person Harmonica1337    schedule 31.03.2018
comment
Привет, tehhowch, функция onEdit (e) творит чудеса, и это правильная функция, но я столкнулся с такой проблемой stackoverflow.com/questions/49120632/ Я могу запустить UrlFetchApp .fetch вне функции onEdit (e), но внутри он всегда выдает ошибку разрешения, я уже добавил области в appsscript.json, все та же проблема. Как вы предлагаете подойти к этой проблеме?   -  person Harmonica1337    schedule 31.03.2018
comment
Поскольку простые триггеры запускаются без авторизации, они ограничены по объему. только тем функциям, которые не нуждаются в авторизации. Вот почему я упомянул, что вы, вероятно, хотите function myFunctionWithAnInstalledOnEditTrigger(e), а не function onEdit(e). Решение состоит в том, чтобы переименовать вашу функцию (чтобы она не активировала простой триггер) и создать установленный триггер для вашей переименованной функции.   -  person tehhowch    schedule 31.03.2018
comment
это то, что я сейчас pastebin.com/S9kw8QVR, изменил appsscript.json на этот pastebin.com/df8dKYi0, если я запускаю его без UrlFetchApp.fetch (url) и остального, он работает, но если я не У меня проблема с авторизацией, как по этой ссылке. Я уже изменил имя функции onEdit (e) на что-то вроде installedtrigger (e), перехожу к Edit- ›All Your Triggers, настраиваю запускаемый installedtrigger (e), события из электронной таблицы и При изменении, сохраните, и он дает мне ошибку в сценарии выполнения, говоря, что он не может вызвать метод getRow его undefined   -  person Harmonica1337    schedule 31.03.2018
comment
вам нужно событие on edit, а не событие on change. (Объекты событий различны, как и критерии срабатывания).   -  person tehhowch    schedule 31.03.2018
comment
в этом была проблема, теперь все отлично, очень признателен.   -  person Harmonica1337    schedule 31.03.2018


Ответы (1)


Если щелкнуть любую ячейку (я) и затем вызвать эту функцию из кнопки или меню, вы получите обозначение A1 для ячейки, по которой щелкнули мышью.

function getRange () {

  var range = SpreadsheetApp.getActiveRange();
  var a1 = range.getA1Notation();

}

Это та же функция, которая используется для получения индекса строки.

function getRange () {

  var range = SpreadsheetApp.getActiveRange();
  var rowIndex = range.getRowIndex()

}
person James D    schedule 28.03.2018