我正在寻找一种方法,用谷歌电子表格单元格中的特定数据更新谷歌表单元素的标题。随着电子表格中的数据发生变化,表单元素的页眉也应该发生变化。
这是我正在使用的代码。
function readTheSheet() {
var ss = SpreadsheetApp.openById("SpreadsheetKey");
var active = SpreadsheetApp.setActiveSpreadsheet(ss);
var sheet = SpreadsheetApp.setActiveSheet(ss.getSheets()[4]);
var data = ss.getDataRange().getValues(); // Data for pre-fill
var formUrl = ss.getFormUrl();
var form = FormApp.openByUrl(formUrl);
var items = form.getItems();
var formItem = items[0].asTextItem();
formItem.setTitle('Aktueller Clankrieg: ' + data[1][0]);
Logger.log(data[1][0]);
};
这段代码运行良好,只是当有人响应表单时它不会更新。根据Google Dev的说法,onOpen((触发器只在用户打开表单时运行,而不是在响应表单时运行。
有人知道是否以及如何做到这一点吗?
如果是,我们将非常感谢您的帮助或指导。
提前谢谢!Smite
OnOpen((只在有人打开表单进行编辑时触发。:(
为了解决这个问题,我设置了工作表,以便在使用onEdit((触发器更改相关列/行时编辑表单。
不过,如果有人更新了部分数据,然后去吃午饭/回家等,而其他人在两者之间使用了表格,那就成了一个问题。如果你有一个重要的列/行,或者它是否得到了零碎的更新,或者你的用户是否会遵循对你有用的说明,这都无关紧要。
我最终将其更改为手动触发的事件。不过,用户总是忘记使用菜单项,所以我在表格上贴了一个"红色大按钮"jpg,上面有重要的数据,并将脚本与之关联。似乎已经成功了。每当他们更改表单中处理表单的部分时,他们都记得按下按钮,表单就会更新。
基本上从您的工作表中获取更新的数据,然后使用以下组合:
//code to get the value to update into the form
var Form = FormApp.openById('form id') //to open the form
//more code to get the list of form items and select the right one if you are updating more than one thing
item.getTitle() == 'Item name that you want to update' //That is literally what you typed in that section on the form
如果您需要更多关于逻辑/语法的细节,请使用Hollar。