我正在编写一个表格,以便在订购商品时更新库存。在这个项目中,有一个链接到表单的谷歌工作表。该表单包含一个脚本,从工作表中获取当前库存,并根据订单从中减去一个。
表单有三个问题:名称、大小和注释。
我遇到的问题是,该系统工作一次,然后以某种方式存储每个连续表单提交的第一个响应。
对于一个最小的工作示例:我将问题提炼为以下代码,该代码由表单提交触发:
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];
哇。