google-apps-script - 提交时的 Google 表单触发器是在推送到电子表格之前还是之后发生
问题描述
如果我想更改 Google 表单中的答案,比如对多项选择项做出回应,我该怎么做?我可以在提交时触发脚本的执行,但它是在推送到电子表格之前还是之后发生?
以下代码在提交时触发,提交也会导致表单数据被推送到链接的电子表格中。电子表格更新,但结果没有做我想要的。
function setPrice() {
var ws = SpreadsheetApp.openByUrl("spreadsheet_link");
var ss = ws.getSheetByName("BPS")
var inventory = ss.getRange("A2:A280").getValues();
var prices = ss.getRange("B2:B280").getValues();
var prices_no_bp = ss.getRange("C2:C280").getValues();
var form = FormApp.getActiveForm();
var formItems = form.getItems();
var item_selected = form.getItemById("Question 1").asListItem();
var bp_selected = form.getItemById("Question 2").asListItem();
var price_selected = form.getItemByID("Price").asMultipleChoiceItem;
var formResponse = form.createResponse();
// scan the inventory list, find the item selected, and return the price
var this_price = 999999999;
var sl = 8;
for (var i = 0;i < sl; i++) {
if (inventory[i] == item_selected) {
if (bp_selected == "Yes") {
this_price = prices_no_bp[i];
} else {
this_price = prices[i];
}
}
}
// Create the multiple choice entry
// Change the response to the same value
// Attach the response to the form
price_selected.createChoice(this_price);
var response = price_selected.createResponse(this_price);
formResponse.withItemResponse(response)
// Responses are ready for submission
}
这段代码不起作用是因为我在推入电子表格之后更改了响应,还是因为我按正确的顺序执行了操作但没有真正更改响应?
解决方案
在触发的代码运行之前,响应会被推送到响应电子表格中。因此,通过 onSubmit 触发器以编程方式更改响应是没有意义的。最好的选择是改用响应电子表格,因为这是数据可用的地方。
推荐阅读
- javascript - JavaScript formdata 多次上传
- apache - APACHE SSL WWW 重定向到实名
- angularjs - HandsOnTable 编辑器自定义功能
- ubuntu-16.04 - systemd-journald 日志位置
- android - 我有两个包含复选框的 BaseAdapter,如何根据来自 Adapter1 的值检查 Adapter2 的复选框
- javascript - Excel VBA在IE11中使用自动完成填充文本框
- php - PHP在窗口上回显日语
- c# - 如何为 PrintDocument C# 添加边框
- sql - 在动态表上获取“ORA00904:无效标识符”
- angular - Ionic V4(角度)content.scrollToTop