我是Google Apps脚本和Java的新手,从MS Office VBA迁移。我已经做了一些研究,但仍然需要帮助。
我已经设置了两个表格来控制我公司的设备运动。当您将设备从存储中取出时必须填写其中一个,而另一个必须在返回时填写。因此,我设置了一个onFormSubmit触发器来切换特定电子表格上的每个设备状态,以便概述所拍摄和返回的内容。
但是,我无法使用触发器功能上的'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();
}
从我在这里看到的,如果我能得到一个带有某些问题答案的字符串对象,从事件参数'e',并将其存储在'val'变量中,那就可以了。如何直接从“e”访问答案,而不是转到“回复电子表格”?任何帮助都会很棒!
答案 0 :(得分:1)
您可以直接从事件中获取值,方法是引用其值&#34;值&#34;或者&#34; namedValues&#34;属性,在此处记录:https://developers.google.com/apps-script/guides/triggers/events#form-submit
e.values
e.namedValues
namedValues是一个将表单字段名称映射到响应值的对象。
values是一个数组,其中的响应按照它们在电子表格中显示的顺序排列。