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


13

У мене є аркуш Google, який включає сценарій, який слід запустити при натисканні на кнопку. Рекомендований спосіб зробити це (наскільки я можу сказати) - вставити зображення, а потім прикласти сценарій до відповідного зображення.

Це працює чудово, поки я відкриваю аркуш на робочому столі. Однак якщо я відкрию аркуш у додатку Google Android для аркушів, зображення просто не з’явиться. Наскільки я можу сказати, це (відсутність) поведінки ніде не зафіксовано, але я знайшов декілька людей з тією ж проблемою.

Мені було цікаво, як я обминаю цю проблему. Невже я пропустив щось очевидне, що зробить мої зображення видимими в додатку Android? Або є ще один простий спосіб додати тригер скрипта до аркуша, який буде працювати на мобільному пристрої?


2
Це справді проблема з нативним додатком Таблиць для Android, чи не так? Напевно, ваше питання краще стосується ентузіастів Android .
алей

1
@AlE. Це один із способів поглянути на це, але для подолання проблеми потрібні знання Google Sheets, а не знання Android.

@Normal: Тому я задав питання (і не проголосував, щоб закрити). Я просто намагаюся допомогти Аскеру залучити експерта, потрібного для отримання відповіді.
але

Відповіді:


26

Схоже, на даний момент ні зображення, ні спеціальні пункти меню не працюють у додатку «Таблиці Android». Я пропоную створити "функціональне меню" в електронній таблиці. Наприклад:

  1. У комірці A1 написано "Вибрати функцію"
  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
Це працює до тих пір, поки викликана функція не використовується для надсилання електронного листа. Слухач редагування електронних листів не може бути запущений, тому проблема кнопки / користувацького меню дійсно обмежує.
10klines

2
@ 10klines У цьому випадку змініть простий onEditтригер на інстальований, який запускається з дозволу користувача, який встановив тригер.

Якщо ви хочете, ви можете використовувати прапорці для запуску функцій замість зображень або перевірки даних. У моєму планшеті функція eval не працювала, тому я встановив купу прапорців для кожної функції. Я відповідно скоригував код і працює чудово. Підказка: Якщо у вас планшет, не використовуйте Box Box - чомусь не працює.
Тобіас Сарнов

Це приємне рішення, однак воно не працює, якщо функція викликається телефонувати до API та отримувати відповідь від нього, оскільки вона вимагає затвердження Google. Будь-яка робота навколо?
JB

1
@JB Використовуйте встановлений тригер редагування
TheMaster
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.