0

Google Apps ScriptおよびJavaの新機能で、MS Office VBAから移行しました。私はすでにいくつかの研究を行ってきましたが、これでもまだ助けが必要です。フォームからの文字列オブジェクトの収集

私は会社内の機器の動きを制御するために2つのフォームを設定しました。機器を保管庫から取り出すときは、そのうちの1つを必ず充填し、もう1つは返却時に充填する必要があります。ですから、私はonFormSubmitトリガーを設定して、特定のスプレッドシート上の各機器のステータスを切り替え、何が取られ、返されたのかを概観します。

しかし、私はトリガ関数の 'e'引数を使ってこれを行う方法を見つけることができませんでした。私はこれを回避しようとしばらく時間をとっていました。私はフォームレスポンスでスプレッドシートを調べ、最後の行を読んで、必要なことをするために情報を分割しました。大きな問題は、このように動作することで不安定なものが見つかったということです。応答があるスプレッドシートには更新に時間がかかることがあります。私はイベント引数「eから、特定の質問から答えを一つの文字列オブジェクトを取得することができれば、私がここに表示されるものと

function onFormSubmit(e) { 

    Utilities.sleep(30000); // I put this to try to minimize the Spreadsheet update problem 

    var ds = SpreadsheetApp.openById("storage-control-sheet-id").getSheetByName("Control"); 
    var os = SpreadsheetApp.openById("form-responses-sheet-id").getSheetByName("Form Responses 1"); 
    var val = os.getRange(os.getLastRow(), 10, 1, 14).getValues().toString(); // holds data from region with the equipments names 
    var responsavel = os.getRange(os.getLastRow(), 4).getValue().toString(); // holds the name of the person in charge of equipment 
    var motivo = os.getRange(os.getLastRow(), 3).getValue().toString(); // holds the reason for using the equipment 
    var prevret = os.getRange(os.getLastRow(), 6).getValue(); // holds the date for returning the equipment 
    var table = ds.getRange("B3:B149").getValues(); // holds a list with equipment names 
    var output = ds.getRange("C3:F149").getValues(); // holds current info at the Storage Control Spreadsheet 
    // now working with the data collected... 
    var arr = []; 
    var indexes = []; // collect the lines that need to change on the ds object 
    val = val.split(","); 
    for (var i = 0; i<val.length; i++){ 
    if (val[i].toString()!=="") { 
     arr.push(val[i].trim()); 
    } 
    } 

    for (var i = 0; i<table.length;i++){ 
    if (arr.indexOf(table[i][0]) >= 0) { 
     indexes.push(i); //checking which lines on 'output' should change 
    } 
    } 
    for (var i = 0; i<indexes.length; i++) { 
    output[indexes[i]][0] = "In use"; 
    output[indexes[i]][1] = responsavel; 
    output[indexes[i]][2] = motivo; 
    output[indexes[i]][3] = prevret; 
    } 

    ds.getRange("C3:F149").setValues(output); 
    SpreadsheetApp.flush(); 
} 

:とにかく、ここで私は、「機器の取り外し書」のために今持っているコードです'それを' val '変数に格納すると、それはそれを行います。レスポンススプレッドシートに行くのではなく、「e」から回答に直接アクセスするにはどうすればよいですか?どんな助けも素晴らしいでしょう!

答えて

1

あなたは参照することにより、イベントから直接値を取得するか、それはここに文書化されている「値」または「namedValues」プロパティ、です:https://developers.google.com/apps-script/guides/triggers/events#form-submit

e.values 
    e.namedValues 

namedValuesは、フォームフィールド名をマッピングするオブジェクトです応答値。

valuesは、スプレッドシートに表示されるのと同じ順序で応答を含む配列です。

+0

私は何が起こるのかわかりませんが、最初のコード行に 'Logger.log(e.values);'を入れてそこに何が入っているのかを確認するだけです。これが起こる可能性のある具体的な理由は何ですか? –

+0

手動で実行している場合、eは常に定義されません。そうでなければ私は確信していません。この機能は通常、それに基づいていくつかのプロジェクトがあるために機能します。 –

+0

私はそれを知っています... 。 –

関連する問題