新的Google电子表格Concatenate限制50000个字符

时间:2014-03-13 03:35:24

标签: google-sheets

迁移到新的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)

4 个答案:

答案 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.不是CONCATENATECONCAT。因此,我使用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;
}