我有一个谷歌表格,由于各种原因有多个复选框问题。我最终希望将已知数量的这些合并。
提交表单后,我想我可以使用应用程序脚本获取提交的数据,将其复制到另一个工作表,然后将上述问题响应合并到单个单元格csv中。
所以请看以下示例:
name: 'name'
question1: ['a','b','e']
question2: []
question3: ['dog','cat']
question4: ['notMerged']
并将其复制到另一个看起来像的页面:
name: 'name'
questions: ['a','b','e','dog','cat']
question4: ['notMerged']
我一直在阅读有关为onFormSubmit设置触发器并获取数据的信息,但我不确定合并结果,将它放在同一行#等内容。要合并的字段的列索引是静态的但是没有总会有一些空的,所以在加入之前我需要对每个进行空检查。
我正在通过“快速入门:管理Google表单的响应”代码来查看最新情况,但我并不真正了解JavaScript。
不是在寻找有人为我写这篇文章,而是帮助我提供一些指导,让我朝着正确的方向前进
答案 0 :(得分:2)
如果你不介意在第二张表上略有不同的格式,你可以在没有脚本的情况下这样做。在第二张表格中,输入您的标题(A1和B1中的'问题'和'问题4'。然后在A2中输入:
= IFERROR(JOIN( "," , FILTER('Form Responses 1'!B2:D2, NOT('Form Responses 1'!B2:D2 = "") )))
在B2中输入:
=iferror('Form Responses 1'!E2)
复制公式。在添加表单数据之前,没有数据的行(尚未)将为空白。
我弄清楚发生了什么。提交表单时,它会插入一行,这会导致公式发生变化。使用此代码,它将在正确的行上设置公式。 (删除旧的公式。)如果您有任何疑问,请告诉我。
//you need to set an installable onFormSubmit trigger
function test(){
var ss=SpreadsheetApp.getActiveSpreadsheet()
Utilities.sleep(4000)
var s=ss.getSheets()[1]
var s1=ss.getSheets()[0]
var lr=s.getLastRow()+1
var lr1=s1.getLastRow()
var r="A"+lr1
var q="B"+lr1
var t="D"+lr1
var u="E"+lr1
s.getRange(lr, 1, 1, 1).setFormula("=iferror('Form Responses 1'!"+ r +")")
s.getRange(lr, 2, 1, 1).setFormula("= IFERROR(JOIN(\",\" , FILTER('Form Responses 1'!"+ q +":"+ t +", NOT('Form Responses 1'!"+ q +":"+ t +" =\"\") )))")
s.getRange(lr, 3, 1, 1).setFormula("iferror('Form Responses 1'!"+ u +")")
}