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」から回答に直接アクセスするにはどうすればよいですか?どんな助けも素晴らしいでしょう!
私は何が起こるのかわかりませんが、最初のコード行に 'Logger.log(e.values);'を入れてそこに何が入っているのかを確認するだけです。これが起こる可能性のある具体的な理由は何ですか? –
手動で実行している場合、eは常に定義されません。そうでなければ私は確信していません。この機能は通常、それに基づいていくつかのプロジェクトがあるために機能します。 –
私はそれを知っています... 。 –