在Google表格上创建了一个用于视频游戏的表单,以便跟踪参与群组活动的情况。我希望将C列中的数据拆分并转换为多列,但是我无法找到一个不需要我自己手动扩展列中公式的解决方案。
以下是我要做的事情的一个例子: Desired Result
从F列开始,第1行是时间戳,第3行是舰队指挥官,第4行和第4行是舰队成员(如果舰队指挥官也在那里也没关系,但如果我们可以过滤那个布朗尼点个人出来,因为他们也列在第3行)。然后,这些数据将用于跟踪每个成员的参与情况,以便他们获得奖励。
到目前为止,我正在使用=TRANSPOSE({Form!C2:C})
,然后使用=TRANSPOSE(SPLIT(D4,", ",0))
,=TRANSPOSE(SPLIT(E4,", ",0))
等,然后就像我说的那样,我不想手动扩展单元格,因为会有很多船队外出(包括我睡着的时候),数据需要尽快更新。
答案 0 :(得分:0)
可能有一个直接电子表格公式的解决方案(我正在考虑使用arrayformula的技巧)但为了简单起见,我将为您提供一个带有自定义公式(Google Apps脚本)的解决方案。 所以here the demo 这里是演示中使用的函数:
function fleetCommander(data) {
var out = [[], []];
var header = data.shift();
var fleets = [];
var maxFleet = 0;
data.map(
function (row) {
if(row[0] == "" ) {return};
var fleet = row[2].split(",");
fleets.push(fleet);
if(maxFleet < fleet.length) { maxFleet = fleet.length;}
out[0].push(row[0]);
out[1].push(row[1]);
}
);
for(var fleetIndex = 0; fleetIndex < maxFleet; fleetIndex++) {
out.push([]);
}
for(var fleetIndex = 0; fleetIndex < maxFleet; fleetIndex++) {
for(var f = 0; f < fleets.length; f++) {
out[fleetIndex + 2].push(fleets[f][fleetIndex] || "");
}
}
return out;
}
答案 1 :(得分:0)
对于基于公式的方法,请尝试输入E1
=ArrayFormula(transpose({A2:A,D2:D,B2:B, IFERROR(TRIM(REGEXEXTRACT(","&C2:C,"^"&REPT(",+[^,]+",COLUMN(OFFSET(A1,,,1,30))-1)&",+([^,]+)")))}))
如果您确实不需要包含在所需结果中的空白行,请将上述内容更改为
=ArrayFormula(transpose({A2:B,IFERROR(TRIM(REGEXEXTRACT(","&C2:C,"^"&REPT(",+[^,]+",COLUMN(OFFSET(A1,,,1,30))-1)&",+([^,]+)")))}))