2017-01-01 10 views
0

送信されたフォームデータの要素を別のスプレッドシートにコピーし、別の用途のために一部のデータを変換するGoogleスプレッドシートを使用しています。手動で実行すると、スクリプトの部分は完全に機能しますが、自動的に実行されます。Googleシートスクリプトはフォーム送信時に実行されません

このスプレッドシートには複数のフォームが接続されており、すべて異なるタイミングでデータを送信します。

  1. がどのように私は私のスクリプトを自動的に実行するのですか:

    だから、私は一種の2つの質問がありますか?私はのトリガーを作成しました。スプレッドシートからフォーム提出の場合が実行されません。

  2. 特定のフォームが送信された場合、または特定のシートに新しい行が追加された場合にのみ実行されるようにするにはどうすればよいですか?

ウェブには回答がありましたが、3年前から多くの記事がありました。それ以来、シート、フォーム、スクリプトエディタの作業方法は大きく変わっているようです。

答えて

1

インストール可能なトリガー と一緒にonFormSubmit関数が必要です。

Htmlサービスフォームを使用している場合は、 出力から宛先シートの名前を にすることができます。スプレッドシートの から作成したフォームでは、この操作を行うことはできません。私ができることは、 です。 シートが更新されたかどうかを確認するために、フォームタイムシートとタイムスタンプを フォームの最後の行と比較してください。 以降、複数の書式を同じ時刻に提出することは可能です(ただし、そうではありません)。

これを試してみてください:

//installable trigger also needed. 
function onFormSubmit(e){ 
var ts=e.namedValues.Timestamp 
findResponseForm(ts) 
} 

function findResponseForm(ts) { 
var ss=SpreadsheetApp.getActiveSpreadsheet() 
var s=ss.getSheetByName('Form Responses 1') //get 'Form Responses 1' sheet 
var lr=s.getLastRow() //get last row number of 'Form Responses 1' sheet 
var s1=ss.getSheetByName('Form Responses 2') //get 'Form Responses 2' sheet 
var lr1=s1.getLastRow() //get last row number of 'Form Responses 2' sheet 
var time1=s.getRange(lr, 1, 1,1).getValue() //get 'Form Responses 1'last Timestamp 
var ftime1=Utilities.formatDate(time1, "GMT-6", "d/M/yyyy' 'HH:mm:ss") //convert 'Form Responses 1'last Timestamp format to form Timestamp format 
var time2=s1.getRange(lr1, 1, 1,1).getValue() //get 'Form Responses 2'last Timestamp 
var ftime2=Utilities.formatDate(time2, "GMT-6", "d/M/yyyy' 'HH:mm:ss") //convert 'Form Responses 1'last Timestamp format to form Timestamp format 
if(ts==ftime1){ //if date/time match 
    Logger.log('Form Responses 1') 
    //call function to prosses 'Form Responses 1' data 
} 
    else if(ts==ftime2){ //if date/time match 
    Logger.log('Form Responses 2') 
    //call function to prosses 'Form Responses 2' data 
    //Add more 'else if' if more forms are involved. 
    } 
} 
+0

こんにちはエド、 は、私は自分のコードを更新したとonFormSubmitが実行されると、それが正しいシート用のスクリプトを実行することをテストすることができ、ご返信いただきありがとうございます。私が抱えている課題は、Googleフォームを使用してフォームを送信すると、フォームが通常の方法でスプレッドシートに入力されますが、スクリプトは実行されません。 スクリプトを実行するには他に何が必要ですか?何とか展開/公開する必要がありますか?私はそれを公表しようとしましたが、利用可能なオプションが私がしようとしているものと一致しません。 –

関連する問題