Google sheets 基于表单响应的Google电子表格格式化
我正试图让一个Google表单根据1个表单输入的数据,用多行填充电子表格,如下所示:Google sheets 基于表单响应的Google电子表格格式化,google-sheets,google-forms,Google Sheets,Google Forms,我正试图让一个Google表单根据1个表单输入的数据,用多行填充电子表格,如下所示: function submitData(e) { var sheet = SpreadsheetApp.getActive().getSheetByName("Formated responses"); var res = e.namedValues; var numberOfParts = res["Number of parts"][0]; var m
function submitData(e) {
var sheet = SpreadsheetApp.getActive().getSheetByName("Formated responses");
var res = e.namedValues;
var numberOfParts = res["Number of parts"][0];
var mainFields = [res["Timestamp"][0], res["Client name"][0], numberOfParts];
switch (numberOfParts) {
case '1':
var fieldsOne = [res["Part identification number"][0], res["Part name"][0]];
sheet.appendRow(mainFields.concat(fieldsOne));
break;
case '2':
var fieldsTwo = [res["#1 part identification number"][0], res["#1 part name"][0]];
sheet.appendRow(mainFields.concat(fieldsTwo));
fieldsTwo = [res["#2nd part identification number"][0], res["#2nd part name"][0]];
sheet.appendRow(mainFields.concat(fieldsTwo));
break;
case '3':
var fieldsThree = [res["#1st part identification number"][0], res["#1st part name"][0]];
sheet.appendRow(mainFields.concat(fieldsThree));
fieldsThree = [res["#2nd part identification number"][1], res["#2nd part name"][1]];
sheet.appendRow(mainFields.concat(fieldsThree));
fieldsThree = [res["#3rd part identification number"][0], res["#3rd part name"][0]];
sheet.appendRow(mainFields.concat(fieldsThree));
break;
}
}
- 表单简单,客户信息最少
- 根据客户所需的选定零件数量(此时为1、2或3),表格转到第1、2或3节,其中按零件名称和识别号输入1、2或3
- 然后,工作表编辑器可以在额外的行中输入数据,如“交货日期”和“项目价格”
p、 s.单元格着色仅用于指出行之间的公共数据一个选项是执行以下操作: #1.安装onFormSubmit触发器: 安装附加到电子表格的触发器,以便每次提交附加到电子表格的表单时都会运行一个函数(这假定表单已附加到电子表格) 触发器可以手动安装,也可以按照以下步骤安装,也可以按以下步骤安装。要以编程方式安装触发器,请通过单击
Tools>scripteditor
打开绑定到电子表格的脚本,然后复制一个脚本并执行此函数一次:
function createTrigger() {
var ss = SpreadsheetApp.getActive();
ScriptApp.newTrigger("submitData")
.forSpreadsheet(ss)
.onFormSubmit()
.create();
}
这将在每次提交表单时触发名为submitData
的函数。接下来是编写函数,该函数应该以您想要的格式附加提交的数据
#2.将提交的数据追加到工作表的功能:
为了将通过表单提交的数据附加到名为格式化响应
的工作表中,您需要使用相应的表单,其中包含提交的数据。您可以使用此选项检查提交的零件数量及其相应字段的值。然后,可以使用该方法将这些数据附加到工作表中
可能是这样的:
function submitData(e) {
var sheet = SpreadsheetApp.getActive().getSheetByName("Formated responses");
var res = e.namedValues;
var numberOfParts = res["Number of parts"][0];
var mainFields = [res["Timestamp"][0], res["Client name"][0], numberOfParts];
switch (numberOfParts) {
case '1':
var fieldsOne = [res["Part identification number"][0], res["Part name"][0]];
sheet.appendRow(mainFields.concat(fieldsOne));
break;
case '2':
var fieldsTwo = [res["#1 part identification number"][0], res["#1 part name"][0]];
sheet.appendRow(mainFields.concat(fieldsTwo));
fieldsTwo = [res["#2nd part identification number"][0], res["#2nd part name"][0]];
sheet.appendRow(mainFields.concat(fieldsTwo));
break;
case '3':
var fieldsThree = [res["#1st part identification number"][0], res["#1st part name"][0]];
sheet.appendRow(mainFields.concat(fieldsThree));
fieldsThree = [res["#2nd part identification number"][1], res["#2nd part name"][1]];
sheet.appendRow(mainFields.concat(fieldsThree));
fieldsThree = [res["#3rd part identification number"][0], res["#3rd part name"][0]];
sheet.appendRow(mainFields.concat(fieldsThree));
break;
}
}
注:
- 可以简化函数
(可能会删除submitData
,并使用开关
循环),但表单字段的名称彼此不一致,妨碍了此选项。因此,该函数有相当多的重复。我建议您修复字段名并稍微重写函数for
onFormSubmit
,从表单响应中获取数据,并以所需格式将其复制到所需的工作表中;(3)使用图纸公式将数据复制到所需格式。你认为什么最适合你的情况?您是否可以使用应用程序脚本?此外,您提供的表单不是公共的。你能提供一份公开的、没有敏感信息的副本吗?完成。我已经公开了这个表单(很抱歉)。。。我曾尝试使用stackexchange[链接]上发布的一个类似问题,但没有成功。我没有使用“应用程序脚本”,我认为我必须实现更“自动化”(在表单提交上)的功能。好吧,应用程序脚本是实现“更自动化”的工具,就像我前面提到的onFormSubmit
。在这种情况下,我前面提到的任何选项都适合您吗?