Добавьте триггер скрипта в Google Sheet, который будет работать в мобильном приложении Android

13

У меня есть лист Google, который содержит скрипт, который должен запускаться при нажатии кнопки. Рекомендованный способ сделать это (насколько я могу судить) - вставить изображение, а затем прикрепить скрипт к соответствующему изображению.

Это прекрасно работает, пока я открываю лист на рабочем столе. Тем не менее, если я открою лист в приложении Google Android для листа, изображение просто не появится. Насколько я могу судить, это (отсутствие) поведения нигде не задокументировано, но я нашел несколько людей с такой же проблемой.

Мне было интересно, как мне обойти эту проблему. Я пропустил что-то очевидное, что сделает мои изображения видимыми в приложении Android? Или есть еще один простой способ добавить триггер сценария на лист, который будет работать на мобильных устройствах?

Probaton
источник
2
Это действительно проблема с нативным приложением Sheets для Android, не так ли? Ваш вопрос, вероятно, лучше для энтузиастов Android .
Эль
1
@AlE. Это один из способов взглянуть на это, но для преодоления этой проблемы нужны знания Google Sheets, а не знания Android.
@ Нормальный: Вот почему я задал вопрос (и не голосовал, чтобы закрыть). Я просто пытаюсь помочь Аскеру привлечь эксперта, необходимого для получения ответа.
Эль

Ответы:

26

Похоже, что в настоящее время приложения Android Sheets не работают ни с изображениями, ни с пользовательскими пунктами меню. Я предлагаю создать «меню функций» в электронной таблице. Например:

  1. Ячейка А1 говорит «Выберите функцию»
  2. Ячейка B1 имеет правило проверки данных, которое ограничивает содержимое именами функций, которые у вас есть. В моем примере это «insertSomething» и «convertSomething». (Не проверяйте «показать справку» в диалоговом окне проверки данных, всплывающее окно «Справка» раздражает на мобильном телефоне.)
  3. Функция скрипта onEdit(простой триггер), выполняемая при каждом редактировании, проверяет, изменилось ли содержимое B1. Если это так, он запускает соответствующую функцию.

Вот мой код с двумя функциями, включенными для демонстрации:

function onEdit(e) {
  if (e.range.getA1Notation() == 'B1') {
    if (/^\w+$/.test(e.value)) {        
      this[e.value]();
      e.range.clear();
    }
  }
}

function insertSomething() { 
  var sheet = SpreadsheetApp.getActiveSheet();
  sheet.getRange(2,3).setValue('inserted something');
}  

function convertSomething() { 
  var sheet = SpreadsheetApp.getActiveSheet();
  sheet.getRange(3,3).setValue('converted something');
}  

Условие /^\w+$/.test(e.value)- просто проверить, что у нас есть непустая строка, и мы не выполняем вредоносный код, который кто-то каким-то образом поместил в ячейку B1. После вызова функции с помощью this[e.value]();( thisотносится к глобальному объекту и содержит имена функций) содержимое B1 очищается. Можно выбрать снова запустить ту же функцию или другую.

В качестве подтверждения концепции, вот скриншоты из приложения. Снимок экрана 1: выбор функции

выбирать

Снимок экрана 2: после запуска функции

после

Ссылки

Хозяин
источник
1
Это работает до тех пор, пока вызываемая функция не используется для отправки электронного письма. Сообщения электронной почты не могут быть инициированы слушателем редактирования, поэтому проблема с кнопкой / пользовательским меню действительно ограничивает.
10
2
@ 10klines В этом случае измените простой onEditтриггер на устанавливаемый, который запускается с разрешения пользователя, установившего триггер.
Если вы хотите, вы можете использовать флажки для запуска функций вместо изображений или проверки данных. На моем планшете функция eval не работала, поэтому я установил несколько флажков для каждой функции. Я изменил код соответственно и работает нормально. Подсказка: если у вас есть планшет, не используйте окно сообщений - по какой-то причине не работает.
Тобиас Сарнов
Это хорошее решение, однако оно не работает, если функция вызывается для вызова API и получения ответа от нее, когда она запрашивает одобрение Google. Любая работа вокруг?
JB
1
@JB Использовать устанавливаемый триггер редактирования
TheMaster