使用query()在Google表格中加入变量分隔符

问题描述 投票:0回答:1

我正在寻找一种有效的方法来连接变量分隔符,如下面的输出所示,其中有可变数量的“~”用作分隔符,可能用作 lamda() 和 query()

例如,下表将 A3:F3 与变量 tildas 组合起来 ~ 使用

="~"&A3&"~~~"&B3&"~"&C3&"~~~"&D3&"~"&E3&"~~"&F3&"~"

Join() 实际上不会很好地工作,因为它也不会添加封装 ~,textjoin() 可以在 lamda() 中与 arrayformula() 结合使用。

但是,我可能想将此 函数与 query() 或其他公式结合使用,发现很难将字符串插入到查询中,并且需要一种解决方法来完成列的串联

=transpose(query(transpose(_you query_);;COLUMNS(_you query_)))

=QUERY(A1:B4, "Select A & 'two' ")
这样简单的事情会失败。

身份证 第一 最后 生日 兄弟姐妹 年龄 输出
AB 杰克 梅西 19年1月1日 玛丽亚,玛丽 5 ~AB~~~杰克~梅西~~~01/01/19~玛丽亚,玛丽~~5~
CD 杰克 史密斯 19年1月2日 5 ~CD~~~杰克~史密斯~~~01/02/19~~~5~
EF 山姆 梅西 19年2月1日 塔拉、詹姆斯、比利 5 ~EF~~~萨姆~梅西~~~02/01/19~塔拉、詹姆斯、比利~~5~
GH 止摩他 雷诺多 19年3月2日 安德里亚 5 ~GH~~~萨玛莎~雷诺多~~~03/02/19~安德里亚~~5~
IJ 约翰 乔丹 19年4月1日 5 ~IJ~~~约翰~乔丹~~~04/01/19~~~5~
吉隆坡 杰米 布莱恩特 18年5月2日 杰克、迈克尔、伊丽莎白 5 ~KL~~~杰米~布莱恩特~~~05/02/18~杰克、迈克尔、伊丽莎白~~5~
明尼苏达 珍妮 奥尼尔 17年1月1日 7 ~MN~~~珍妮~奥尼尔~~~01/01/17~~~7~
google-sheets-formula
1个回答
0
投票

无法通过

QUERY
做到这一点。

您可以从

数据>命名函数
定义自定义函数F(arr,ins)

F(arr,ins) ← ARRAYFORMULA(BYROW(REDUCE(arr,TOCOL(SPLIT(ins,"()")),LAMBDA(a,c,LET(
                s,SPLIT(c,","),i,CHOOSECOLS(s,SEQUENCE(COUNTA(s)-1)),t,CHOOSECOLS(s,-1),
                REDUCE(a,i,LAMBDA(a_,i_,IF(i_=0,{IF(SEQUENCE(ROWS(a)),t),IF(SEQUENCE(ROWS(a),COLUMNS(a)-1),)},)&
                TO_TEXT(a_)&IF(SEQUENCE(1,COLUMNS(a))=i_,IF(a="",,t),)))))),LAMBDA(r,JOIN(,r))))

并按如下方式使用它:

=F(A2:F8,"(1,3,~~~)(0,2,4,6,~)(5,~~)")

这意味着:在第 1 列和第 3 列之后插入

~~~
,在第 1 列之前和第 2、4、6 列之后插入
~
,在第 5 列之后插入
~~

您还可以直接在公式中定义函数:

=ARRAYFORMULA(LET(
   F,LAMBDA(arr,ins,BYROW(REDUCE(arr,TOCOL(SPLIT(ins,"()")),LAMBDA(a,c,LET(
       s,SPLIT(c,","),i,CHOOSECOLS(s,SEQUENCE(COUNTA(s)-1)),t,CHOOSECOLS(s,-1),
       REDUCE(a,i,LAMBDA(a_,i_,IF(i_=0,{IF(SEQUENCE(ROWS(a)),t),IF(SEQUENCE(ROWS(a),COLUMNS(a)-1),)},)&
         TO_TEXT(a_)&IF(SEQUENCE(1,COLUMNS(a))=i_,IF(a="",,t),)))))),LAMBDA(r,JOIN(,r)))),
   F(A2:F8,"(1,3,~~~)(0,2,4,6,~)(5,~~)")))

© www.soinside.com 2019 - 2024. All rights reserved.