Dodaj wyzwalacz skryptu do Arkusza Google, który będzie działał w aplikacji mobilnej na Androida

13

Mam arkusz Google zawierający skrypt, który powinien zostać uruchomiony po kliknięciu przycisku. Zalecanym sposobem (o ile mogę to stwierdzić) jest wstawienie obrazu, a następnie dołączenie skryptu do danego obrazu.

Działa to dobrze, o ile otwieram arkusz na pulpicie. Jeśli jednak otworzę arkusz w aplikacji do arkuszy Google na Androida, obraz po prostu się nie pojawi. O ile wiem, to (brak) zachowania nie jest nigdzie udokumentowane, ale znalazłem wiele osób z tym samym problemem.

Zastanawiałem się, jak obejść ten problem. Czy przegapiłem coś oczywistego, co sprawi, że moje obrazy będą widoczne w aplikacji na Androida? Czy istnieje inny prosty sposób dodania wyzwalacza skryptu do arkusza, który będzie działał na urządzeniach mobilnych?

Probaton
źródło
2
To naprawdę problem z natywną aplikacją Arkusze na Androida, prawda? Twoje pytanie jest prawdopodobnie lepsze w przypadku entuzjastów Androida .
ale
1
@Ale. To jeden ze sposobów, aby na to spojrzeć, ale aby rozwiązać problem, potrzebna jest znajomość Arkuszy Google, a nie znajomość Androida.
@Normal: Dlatego zadałem pytanie (i nie głosowałem za zamknięciem). Próbuję tylko pomóc Pytającemu przyciągnąć eksperta (ise) potrzebnego do uzyskania odpowiedzi.
ale

Odpowiedzi:

26

Wygląda na to, że ani obrazy, ani niestandardowe elementy menu nie działają obecnie w aplikacji Arkusze na Androida. Sugeruję utworzenie „menu funkcji” w arkuszu kalkulacyjnym. Na przykład:

  1. Komórka A1 mówi „Wybierz funkcję”
  2. Komórka B1 ma regułę sprawdzania poprawności danych, która ogranicza treść do nazw posiadanych funkcji. W moim przykładzie są to „insertSomething” i „convertSomething”. (Nie zaznaczaj opcji „pokaż pomoc” w oknie dialogowym sprawdzania poprawności danych, wyskakujące okienko „pomoc” jest denerwujące na urządzeniach mobilnych).
  3. Funkcja skryptu onEdit(prosty wyzwalacz), działająca przy każdej edycji, sprawdza, czy zawartość B1 uległa zmianie. Jeśli tak, uruchamia odpowiednią funkcję.

Oto mój kod z dwiema funkcjami dla celów demonstracyjnych:

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');
}  

Warunkiem /^\w+$/.test(e.value)jest tylko sprawdzenie, czy mamy niepusty ciąg i nie wykonujemy złośliwego kodu, który ktoś w jakiś sposób umieścił w komórce B1. Po wywołaniu funkcji this[e.value]();( thisodnosi się do obiektu globalnego i zawiera nazwy funkcji) zawartość B1 zostaje wyczyszczona. Można wybrać ponowne uruchomienie tej samej funkcji lub innej.

Jako dowód koncepcji, oto zrzuty ekranu z aplikacji. Zrzut ekranu 1: wybór funkcji

wybierać

Zrzut ekranu 2: po uruchomieniu funkcji

po

Bibliografia

Mistrz
źródło
1
Działa tak długo, jak długo wywoływana funkcja nie jest używana do wysyłania wiadomości e-mail. Wiadomości e-mail nie mogą być wyzwalane przez program nasłuchujący edycji, więc problem przycisku / niestandardowego menu jest naprawdę ograniczający.
10klinów,
2
@ 10klines W takim przypadku zmień prosty onEditwyzwalacz na instalowalny, który działa za zgodą użytkownika, który zainstalował wyzwalacz.
Jeśli chcesz, możesz użyć pól wyboru do wyzwalania funkcji zamiast obrazów lub sprawdzania poprawności danych. Na moim tablecie funkcja eval nie działała, więc ustawiłem kilka pól wyboru dla każdego z nich. Dostosowałem odpowiednio kod i działa dobrze. Wskazówka: jeśli masz tablet, nie korzystaj z okna wiadomości - z jakiegoś powodu nie działa.
Tobias Sarnow
To miłe rozwiązanie, jednak nie działa, jeśli funkcja jest wywoływana w celu wywoływania interfejsu API i uzyskiwania od niego odpowiedzi, ponieważ prosi o zatwierdzenie google. Masz jakieś prace?
JB
1
@JB użycie instalowanego Edycja wyzwalacza
Mistrz