很多表格都有多选题。许多表格应用程序(绝对是谷歌表格和JotForm)(当与工作表集成时)将它们全部放在一个单元格中,有时用一个 ,
, ;
或用一个新的行。
这样就很难分析数据,因为它被当作唯一的答案。
目标是按名称和日期分列每个条目。见回复中的 "希望的输出 "选项卡)。这应该是一个在表单中的解决方案,因为编辑表单并不总是一个选项(我在许多表单的数据中都遇到过这个问题)。
它必须是动态的(随着响应的到来),并且支持无限量的条目。同时最好不要使用自定义函数。
希望的输出。
我把我的答案和它的缺点一起贴出来了。
这是我想出来的,它并不是很好,因为它使用了一个自定义函数(我在使用它与另一个表使用导入范围输出的数据时有问题)。我也觉得它真的是很长的方式来做一些应该更简单的实现。
=ARRAYFORMULA(Split(QUERY(joinSplit(ARRAYFORMULA(SUBSTITUTE(FILTER({","&{'Form Responses 1'!C2:C}},{'Form Responses 1'!C2:C}<>""),",",Filter({"👨🌾"&{'Form Responses 1'!B2:B}&"👨🏾🌾"&{'Form Responses 1'!A2:A}&"👨🏾🌾"},{'Form Responses 1'!C2:C}<>""))), "👨🌾"),"Select Col1 where Col1 is not null"),"👨🏾🌾"))
这里是自定义函数 "joinSplit "的代码(我从某个地方得到的,但我不记得在哪里)。
`function joinSplit(column, delim)
{
var result = [];
var row = [];
for (var i = 0, l = column.length; i < l; i++)
{
row = column[i].join(delim).split(delim);
row.forEach( function(elt) { result.push([elt]); } );
}
return result;
}`
如果有人需要的话 此处 是一个现成的版本,复制一份并修改相应的字段。
这里是 是我在web apps SE上找到的一个解决方案,解决了一个非常类似的问题。
不过它使用了一个自定义函数。
function result(range) {
delimiter = ", "
targetColumn = 2
var output2 = [];
for(var i=0, iLen=range.length; i<iLen; i++) {
var s = range[i][targetColumn].split(delimiter);
for(var j=0, jLen=s.length; j<jLen; j++) {
var output1 = [];
for(var k=0, kLen=range[0].length; k<kLen; k++) {
if(k == targetColumn) {
output1.push(s[j]);
} else {
output1.push(range[i][k]);
}
}
output2.push(output1);
}
}
return output2;
}