迁移到新的Google电子表格。我有一个自定义公式,将一些数组合并为一个数组
=TRANSPOSE(SPLIT(ARRAYFORMULA(CONCATENATE('Monthly link'!A10:A&CHAR(13) , 'Monthly link'!R10:R&CHAR(13) , 'Monthly link'!AG10:AG&CHAR(13) , 'Monthly link'!AU10:AU&CHAR(13) )), CHAR(13)))
这个公式在旧的Google电子表格中运行得非常好,但在新版本中,它给了我一个" Error: Text result of CONCATENATE is longer than the limit of 50000 characters.
"
有解决方法吗?我已经尝试了Array_Literal
公式,但似乎无法使其发挥作用,这似乎是一种可能的解决方案。但似乎该功能将数组组合在一起而不是向下组合。
我试过了:
=array_literal('Monthly link'!A10:A,'Monthly link'!R10:R,'Monthly link'!AG10:AG,'Monthly link'!AU10:AU)
答案 0 :(得分:7)
回顾here,你可以嵌套连接:
=TRANSPOSE(SPLIT(ARRAYFORMULA(CONCAT(CONCATENATE('Monthly link'!A10:A&CHAR(13) ,
'Monthly link'!R10:R&CHAR(13)), CONCATENATE('Monthly link'!AG10:AG&CHAR(13) ,
'Monthly link'!AU10:AU&CHAR(13)) )), CHAR(13)))
我只是添加了一个CONCATENATE
来组合字符串只有一个值,然后使用CONCAT
来组合这些值。
修改强>
这不是一个完全修复,但是阅读google documentation表示您可以通过here创建旧的电子表格。
编辑2
试试这段代码:
=TRANSPOSE(SPLIT(CONCAT(ARRAYFORMULA(CONCATENATE('Monthly link'!A10:A&CHAR(13),
'Monthly link'!R10:R&CHAR(13))), ARRAYFORMULA(CONCATENATE(
'Monthly link'!AG10:AG&CHAR(13), 'Monthly link'!AU10:AU&CHAR(13)))), CHAR(13)))
似乎错误来自ARRAYFORMULA
,其限制为50000.不是CONCATENATE
或CONCAT
。因此,我使用CONCAT
来组合两个不同的ARRAYFORMULA
,它们都包含原始数据的一半。你可以继续划分它们,直到有4 ARRAYFORMULA
个,如果需要,它们只有一个数据集。
编辑3
目前,我正在javascript found here中实现一项功能。
您可以按Tools->Script editor->Paste
进行测试,然后运行Tools->Script Manager->organizeData->Run
。
我将继续努力......它目前无效,但我很接近;)
编辑4
我完成了!你可以看到它here。您需要使用上述说明(Tools->Script editor->Paste
)创建一个新脚本,保存它,然后您可以通过执行Tools->Script Manager->organizeData->Run
从脚本编辑器窗口或电子表格运行它。
脚本的作用是从表单中获取数据,将其放入要复制的数据中,然后它有一个奇怪的限制,它需要列中的一个字母才能复制它,所以它添加了一个字母所以脚本将用“undefined”填充行。从那里开始,所有行都有“未定义”,因此可以将数据复制到所有行中。
如果您想知道如何将脚本直接实现到单元格中,可以放置:
=organizeData()
它将调用自定义函数!有关详细信息,请参阅here。
答案 1 :(得分:6)
不知道这是否有效,但可能值得一试。有人将此发布在Google文档帮助论坛上。
/.../ If you want more than 50,000 characters in a single cell, you can use QUERY's header clause.
Example:
=ArrayFormula(query(row(A1:A70000),,100000))
This creates a cell with 408,893 characters. You can verify by using the LEN function.
好的,我修好了上面的这一行,我认为它有效:
=ArrayFormula(query(A1:A100000,,100000))
如果您在A列中有数据,从第1行到第100000行,则会提供数据。它将连接所有数据。我猜最大长度是100000个字符?
答案 2 :(得分:0)
我的回答与另一个类似的Q有关,标记为duplicete:
Text result of JOIN is longer than the limit of 50000 characters
我的解决方案是使用公式:
=query(joinSplit(A2:A, ";"), "select Col1, count(Col1) group by Col1", 0)
其中joinSplit(A2:A, ";")
是自定义公式。
要粘贴到脚本编辑器中的代码是:
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;
}
它将返回唯一项目列。
如果数据是:
A;B;C;D
D;D
E;F;A;A
G;A;B;C
结果是列:
A
B
C
D
D
D
E
F
A
A
G
A
B
C
答案 3 :(得分:0)
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.trim()]); } );
}
return result;
}