Androidモバイルアプリで機能するスクリプトトリガーをGoogleスプレッドシートに追加する


13

ボタンをクリックしたときに実行されるスクリプトを含むGoogleシートがあります。これを行うには(私が知る限り)、画像を挿入し、問題の画像にスクリプトを添付することをお勧めします。

デスクトップでシートを開いている限り、これは問題なく機能します。ただし、AndroidのGoogleシートアプリでシートを開くと、画像が表示されません。私が知る限り、この動作の欠如はどこにも文書化されていませんが、同じ問題を抱えている人をたくさん見つけました。

どうすればこの問題を回避できるのだろうと思っていました。Androidアプリで画像を表示するための明らかなものを見逃しましたか?または、モバイルで機能するスクリプトトリガーをシートに追加する簡単な方法はありますか?


1
これは、Androidのネイティブスプレッドシートアプリの問題ですよね。あなたの質問は、おそらくAndroid愛好家の方がよいでしょう。
ale

1
@エール。これはその見方の1つですが、この問題を克服するには、Androidの知識ではなく、Googleスプレッドシートの知識が必要です。

@通常:それが私が質問した理由です(そして閉じるために投票しませんでした)。私はアスカーが答えを得るために必要な専門家を引き付けるのを手助けしようとしているだけです。
ale

回答:


26

現在のところ、画像やカスタムメニュー項目はAndroidスプレッドシートアプリでは機能しないようです。スプレッドシート内に「関数メニュー」を作成することをお勧めします。例えば:

  1. セルA1は「関数を選択します」と言います
  2. セルB1には、コンテンツをユーザーが持つ関数の名前に制限するデータ検証ルールがあります。私の例では、「insertSomething」と「convertSomething」です。(データ検証ダイアログで[ヘルプを表示]をオンにしないでください。[ヘルプ]ポップアップはモバイルでは煩わしいものです。)
  3. onEditすべての編集で実行されるスクリプト関数(単純なトリガー)は、B1のコンテンツが変更されたかどうかを確認します。その場合は、適切な関数を実行します。

これが私のコードです。デモ目的で2つの関数が含まれています。

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:関数が実行された後

後

参考文献


これは非常にシンプルでクリーンで効果的なソリューションです。よくできました。
StephenH 2016年

これは、呼び出される関数が電子メールの送信に使用されない限り機能します。電子メールは編集リスナーによってトリガーできないため、ボタン/カスタムメニューの問題は本当に制限されています。
10klines 2017年

2
@ 10klinesその場合、単純なonEditトリガーを、トリガーをインストールしたユーザーの許可で実行されるインストール可能なトリガーに変更します。

必要に応じて、画像やデータ検証の代わりにチェックボックスを使用して機能をトリガーできます。私のタブレットではeval関数が機能しなかったので、関数ごとに多数のチェックボックスを設定しました。私はそれに応じてコードを調整し、正常に動作しました。ヒント:タブレットをお持ちの場合はメッセージボックスを使用しないでください-何らかの理由で機能しません。
Tobias Sarnow

これは良い解決策ですが、関数が呼び出されてAPIを呼び出し、Googleの承認を求めているときにAPIから応答を取得する場合は機能しません。回避策はありますか?
JB、
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.