表单集的Google应用程序脚本停留在输入的第一个值



我正在编写一个表格,以便在订购商品时更新库存。在这个项目中,有一个链接到表单的谷歌工作表。该表单包含一个脚本,从工作表中获取当前库存,并根据订单从中减去一个。

表单有三个问题:名称、大小和注释。

我遇到的问题是,该系统工作一次,然后以某种方式存储每个连续表单提交的第一个响应。

对于一个最小的工作示例:我将问题提炼为以下代码,该代码由表单提交触发:

function updateStock() 
{
var customer_name = "";
const ss_id = ### I enter spreadsheet ID here ###
const form_id = ### I enter form ID here ###
var sheet = SpreadsheetApp.openById(ss_id);
var form = FormApp.openById(form_id);
var form_resp = form.getResponses()[0];
var customer_name = form_resp.getItemResponses()[0].getResponse();
Logger.log(customer_name);
// Rest of code follows from here
}

在进入第一张表格时,我写道:

名称:Peter

大小:M

注释:

代码返回:

1:43:40 AM Info Peter

(如果我包含代码的其余部分,它将正确地减去库存(。

然后在下一次(或第十次(提交时,我可能会提交:

名称:Joe

大小:L

注释:

再次,代码返回:

1:44:55 AM  Info    Peter

如果我从头开始或明确响应,我可以让它工作一次,但如果不是,代码将永远返回"Peter";作为名称,无论我输入什么。

然而,表格回复是正确的!这只是的电话

var form_resp = form.getResponses()[0];
var customer_name = form_resp.getItemResponses()[0].getResponse();

似乎有一个";缓存的";价值

这似乎是一个奇怪的错误,但我想知道是否有人知道这可能是什么(或者,老实说,是否有更好的方法来实现同样的结果!(

谢谢你抽出时间。

Ugh。我犯了一个非常严重的错误。

正如矢量所指出的:

代码:form.getResponses()返回所有响应,而我认为它返回的是当前响应(阅读文档!(

因此,form.getResponses()[0]自然地返回了第一个答案,而我本应该写:

var N = form.getResponses().length-1;
var form_resp = form.getResponses()[N];

哇。

最新更新