【问题标题】:New Google spreadsheet Concatenate limit 50000 characters新的 Google 电子表格连接限制 50000 个字符
【发布时间】:2014-03-13 03:35:24
【问题描述】:

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

【问题讨论】:

    标签: google-sheets


    【解决方案1】:

    不知道这是否有效,但可能值得一试。有人在 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 个字符?

    【讨论】:

    • 谢谢,这个技巧对我来说就像一个魅力。我尝试测试长度限制,它适用于 4 035 566 个字符。可能会更多,因为我当时停止了测试。
    【解决方案2】:

    回顾here,你大概可以嵌套concatenate:

    =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 来组合两个不同的ARRAYFORMULAs,它们都包含原始数据的一半。您可以继续划分这些,直到有 4 个ARRAYFORMULAs,如果需要,它们都只有一个数据集。

    编辑 3

    目前,我正在努力在 javascript 中实现一个函数,发现 here

    您目前可以通过Tools->Script editor->Paste 对其进行测试,然后通过Tools->Script Manager->organizeData->Run 运行它。

    我会继续努力...目前无法正常工作,但我已经接近了;)

    编辑 4

    我完成了!你可以看到它here。您需要使用上述说明 (Tools->Script editor->Paste) 创建一个新脚本,保存它,然后您可以从脚本编辑器窗口或电子表格中运行它,方法是执行 Tools->Script Manager->organizeData->Run

    脚本所做的是从表单中获取数据,将其放入要复制的数据中,然后它有一个奇怪的限制,即它需要列中的字母才能复制它,所以它添加了一个字母因此脚本将用“未定义”填充行。从那里开始,所有行中都有“未定义”,因此可以将数据复制到所有行。

    如果您想知道如何将脚本直接实现到单元格中,您可以输入:

    =organizeData()
    

    它将调用自定义函数!详情请见here

    【讨论】:

    • 我试过了,不幸的是它没有用。 Error: Text result of CONCAT is longer than the limit of 50000 characters.
    • @jason_can't_code 嗯...你可以使用两个不同的单元格吗?
    • 你能详细说明一下吗?我想我可以,但它不会是动态的。我怎么知道从哪里开始第二个单元格?
    • @jason_can't_code 好点...我将检查有关这些函数的文档...我认为可能会自动插入换行符,这样您就可以有效地增加您的字符数很多
    • 是的,由于QUERY 函数中没有JOIN() 函数,因此该函数基本上是一种将许多数据库合并为一个的解决方法。这是贫民区,但它有效。
    【解决方案3】:

    我的回答与另一个类似的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
    

    【讨论】:

      【解决方案4】:

      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;
      }
      

      【讨论】:

        猜你喜欢
        • 2023-01-20
        • 2014-02-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多