2017-01-20 10 views
1

複数のセル(A1:D5など)を選択し、onEdit(e)をトリガーするテキストを入力すると、選択範囲をどのように取得できますか?これらの関数(e.range、.getActiveRange、.getActiveSelection)は、新しいテキスト(A1)を持つ1つのセルだけを返します!onEditトリガーe.range選択全体ではなく1つのセル

function onEdit(e){ 
    Logger.log('A1 Notation: ' + e.range.getA1Notation()); 

    // Try workaround using getActiveSheet. Also fails within the onEdit function. 
    var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); 
    var range = sheet.getActiveRange(); 
    var selection = sheet.getActiveSelection(); 

    Logger.log('getActiveRange A1 Notation: ' + range.getA1Notation()); 
    Logger.log('getActiveSelection A1 Notation: ' + selection.getA1Notation()); 
} 

テキストを入力する代わりに削除キーを押すと、範囲機能が期待通りに機能します(A1:D5)。

答えて

2

範囲を選択すると、削除を押すと選択したすべてのセルの内容が削除され、選択したすべてのセルに影響する範囲のイベントが表示されます。セルにテキストを入力すると、1つのセルだけが影響を受けるため、1つのセルの範囲でイベントが発生します。

これをテストする場合は、範囲を広げてみてください。イベント範囲は、選択した領域全体ではなく、影響を受けるセルに対してのみ発生します。

P.S. - リージョンを選択して、イベント内でそれを処理しようとせずにコンテンツを操作したい場合は、カスタム関数を作成してスプレッドシートUIに表示する必要があります。同様に、

+0

はい、範囲を削除する(または範囲に貼り付ける)と、範囲内のすべてのセルに影響するため、e.rangeが範囲全体を把握することは意味があります。 編集中の選択したセルの1つのみによってトリガされたonEdit(e)関数内からスプレッドシートの選択範囲を取得するにはどうすればよいですか? 私は部屋のスケジュールシートを自動化しています。部屋の行と時間の列に対応する範囲を選択し、イベント名を入力することで、シートからカレンダーイベントを直接作成できます。 –

+0

制限事項:シンプルトリガーは、ユーザーに許可を求めることなく、自動的に起動するため、いくつかの制限があります。許可を必要とするサービスにアクセスすることはできません。たとえば、Gmailサービスでは認証が必要なため、簡単なトリガーでメールを送信することはできませんが、単純なトリガーでは匿名の言語サービスでフレーズを翻訳できます。 https://developers.google.com/apps-script/guides/triggers/イベントメカニックから脱出してください。範囲を選択し、カスタム関数を使用してこのタスクを実行してみてください。 –

関連する問題