【发布时间】:2014-11-26 01:01:34
【问题描述】:
当我使用 =arrayformula(split(input!G2:G, ",")) 时,为什么拆分公式没有扩展到整个列?
我只得到输入!G2 单元格的结果,而不是 G 列中的其余部分。像=arrayformula(find(",", input!G2:G)) 这样的其他公式似乎可以正常工作并且可以毫无问题地扩展。
【问题讨论】:
标签: split google-sheets array-formulas
当我使用 =arrayformula(split(input!G2:G, ",")) 时,为什么拆分公式没有扩展到整个列?
我只得到输入!G2 单元格的结果,而不是 G 列中的其余部分。像=arrayformula(find(",", input!G2:G)) 这样的其他公式似乎可以正常工作并且可以毫无问题地扩展。
【问题讨论】:
标签: split google-sheets array-formulas
现在,应用于垂直数组的 SPLIT 确实有效。 (2017 年 1 月 4 日)
=ArrayFormula(SPLIT(input!G2:G,","))
或用于错误屏蔽
=ArrayFormula(IFERROR(SPLIT(input!G2:G,",")))
注意:结果数组的宽度与 SPLITted 元素的最大数量一样宽。
(答案的其余部分不再适用,而是出于……历史目的而保留?)
这将被视为一个非常糟糕的答案,但是:事实并非如此。
我怀疑这可能是因为它可能会产生一个锯齿状数组(每行中的元素数量不同),这可能被认为是有问题的。但是,以前版本的表格中曾经“工作”的“数组 SPLIT”(尽管存在一个错误,即它不能在数组的第一个元素上正常工作)。
SPLIT 并不是唯一一个不能在数组上迭代的函数(例如 INDIRECT、INDEX、SUMIFS)。
一种解决方法(2017 年 1 月 4 日编辑):
=ArrayFormula(REGEXREPLACE(input!G2:G&REPT(",",6),REPT("([^,]*),",6)&",*","$"&COLUMN(OFFSET(A1,,,1,6))))
OFFSET(A1,,,1,6) 和 REPT 函数中的 6 决定了 SPLIT 中的最大元素数。您可以注入一个表达式来计算数据列中的最大元素数,但性能会受到更大的影响。
另外,这里需要注意的是,它只支持按单个字符(在本例中为逗号)分割。
或者,您可以查看 Google Apps 脚本自定义函数。
以前的解决方法不再有效,因为 REGEXEXTRACT 似乎不再支持第二个参数的数组 - 无论如何它在 2017 年 1 月的情况。
=ArrayFormula(IFERROR(REGEXEXTRACT(","&input!G2:G,"^"&REPT(",+[^,]+",COLUMN(OFFSET(A1,,,1,6))-1)&",+([^,]+)")))
【讨论】:
你可以使用这个脚本:
function better_split(col, separator) {
var new_col = [];
for (var r = 0; r < col.length; r++) {
if (col[r]) {
new_col.push(col[r][0].split(separator));
}
}
return new_col;
}
像这样使用它(出于性能原因):
=better_split(filter(A2:A, len(A2:A)>0), "/")
【讨论】:
另一种解决方法是首先使用 ARRAYFORMULA 加入带有逗号的 G2:G 列。 然后你可以拆分它。 最后,您可以选择将其转回一列(否则它将作为一行输出)。
=TRANSPOSE(SPLIT(ARRAYFORMULA(JOIN(",",FILTER(G2:G,NOT(ISBLANK(G2:G))))),","))
【讨论】:
不需要数组公式,因为数据 > 将文本拆分为列...无需任何函数或公式即可工作。
【讨论】:
它可以工作,但你必须填充和约束以使其成为方形结果。
获取这些数据:
ColA COLB
Row1 Data ={"Head1","Head2","Head3","Head4","Head5","Head6","Head7";ARRAY_CONSTRAIN(ARRAYFORMULA(SPLIT(A$2:A&" , , , , , , ",",",FALSE,FALSE)),COUNTA(A2:A),7)}
Row2 1,2,3,4,5,6,7,a
Row3 1,2,3,5
给你这个:
ColA COLB
Row1 Data Head1 Head2 Head3 Head4 Head5 Head6 Head7
Row2 1,2,3,4,5,6,7,a 1 2 3 4 5 6 7
Row3 1,2,3,5 1 2 3 4 5
这是公式:
={"Head1","Head2","Head3","Head4","Head5","Head6","Head7";ARRAY_CONSTRAIN(ARRAYFORMULA(SPLIT(A$2:A&" , , , , , , ",",",FALSE,FALSE)),COUNTA(A2:A),10)}
首先,我们使用 ARRAY_CONSTRAIN 将结果限制为可接受的最大结果。您可以计算最大值或对其进行硬编码。我使用了 7 列和尽可能多的行。 ARRAYFORMULA 用来运行它。 SPLIT 文本值用空值填充,以确保它超过约束值。这允许在 ColA 中容纳不同长度的值。 FALSE 我认为可以避免它们被修剪和扰乱数组。可能没必要,我没测试。
【讨论】: