Google表格反转移

时间:2016-01-28 17:48:31

标签: google-sheets

我从其他用户那里看到了这个解决方案,并得到了解答(由Opal提供)。我试图稍微修改一下它的结果但是我遇到了空白值。我有这个原始数据表(作为例子)

idn | id名称| d1 | d2 | d3 ...
id1 | / name1 / | 23 | 13 | 56
id2 | / name2 / | 67 | 45 |
id3 | / name3 / | 43 |
id4 | / name4 / | 78 | 34 | 45

我想将此列表转置为以下表单以便上传到数据库,结果应如下所示:

id1 | / name1 / | date1 | 23
id1 | / name1 / | date2 | 13
id1 | / name1 / | date3 | 56
id2 | / name2 / | date1 | 67
id2 | / name2 / | date2 | 45
id3 | / name3 / | date1 | 43
id4 | / name4 / | date1 | 78
id4 | / name4 / | date2 | 34
id4 | / name4 / | date3 | 45


我该怎么做 - 我目前的解决方案如下,但不适用于空格。我看到Opal解决方案使用空格,但无法弄清楚如何创建日期列(结果中的第3列)

ArrayFormula({transpose(split(查询(rept(A2:A&“”,COUNTA(C1:1)),, 50000),“”)),转置(分裂(查询)(rept(B2:B& “”,COUNTA(C1:1)),, 50000),“”)),TRANSPOSE(分裂(加入(“”,ARRAYFORMULA(REPT(加入(“”,(查询(C1:1)))&“ “,COUNTA(A2:A)))),”“)),转置(split(join(”“,query(transpose(C2:M),, 50000)),”“))})

有什么建议吗?它是一个大型数据集,我对所有字符串函数的限制,rept限制为32,000,连接限制为50,000 感谢。

1 个答案:

答案 0 :(得分:0)

这是一个非常好的公式。我敢肯定你是 意识到如果空白为0则公式有效。 我知道这不是一个完美的解决方案,但它确实有效。 在另一张表中使用:

=ArrayFormula({transpose(split(query(rept(Sheet1!A2:A&" ", COUNTA(Sheet1!C1:1)),,50000)," ")),transpose(split(query(rept(Sheet1!B2:B&" ", COUNTA(Sheet1!C1:1)),,50000)," ")),TRANSPOSE(SPLIT(JOIN(" ", ARRAYFORMULA(REPT(join(" ",(query(Sheet1!C1:1)))&" ", COUNTA(Sheet1!A2:A)))), " ")),transpose(split(join(" ",query(transpose(Sheet1!C2:E5+0),,50000)), " "))})

为了达到目的,C2:E5+0将空格替换为0 公式。它不会影响原始数据。 这将返回正确格式化的数据,但是 不需要的0行。在另一张纸上,清理 不需要的行:

=query(Sheet2!A:D,"select * where D != 0")

这将以正确的格式返回您想要的数据。