If statement 使用行号在Arrayformula中进行Concat 更新-修改答案

If statement 使用行号在Arrayformula中进行Concat 更新-修改答案,if-statement,google-sheets,google-sheets-formula,array-formulas,google-sheets-query,If Statement,Google Sheets,Google Sheets Formula,Array Formulas,Google Sheets Query,在@player0的帮助下,找到了处理行分隔符的解决方案: 【代码】=ARRAYFORMULA(REGEXREPLACE)(转置)(查询)(转置)(拆分)(转置)(拆分)(查询)(IF(D1:D=“[task]”)♦"&D1:D♣♀&D1:D),999^99♦", )), "♀”),999^99)),“\s*♣\s*”,char(10))) 这会将每个[task]部分移动到它自己的单元格中,保留所有其他格式,并停止在每个单元格内容周围添加额外的空白,这些内容是连接在一起的 原职 似乎找不到其

在@player0的帮助下,找到了处理行分隔符的解决方案:

【代码】=ARRAYFORMULA(REGEXREPLACE)(转置)(查询)(转置)(拆分)(转置)(拆分)(查询)(IF(D1:D=“[task]”)♦"&D1:D♣♀&D1:D),999^99♦", )), "♀”),999^99)),“\s*♣\s*”,char(10)))

这会将每个[task]部分移动到它自己的单元格中,保留所有其他格式,并停止在每个单元格内容周围添加额外的空白,这些内容是连接在一起的



原职 似乎找不到其他地方可以这样做,所以很高兴在评论中有任何链接:)

我有一列文本,包含超过一百个文件的内容,每个文件的顶部都有
[task]

超过50000个字符,因此它们会粘贴到每个单元格的换行符中(“粘贴为值”)

我可以很容易地告诉行数要使用,并且有一个可拖动的工作公式,只是无法正确地获得它数组公式功能,因为输入可能很容易改变1000行,所以需要优雅地处理它


仅限公式,无代码


电子表格示例

输入示例(50000多个字符)

注意-如果在我清理驱动器时删除了输入文件,只需复制粘贴下面的示例,直到50000多个字符,或者查看链接的电子表格


输入

[task]
SpriteNE = floor_metal_01.dds
SpriteSE = floor_metal_01.dds
SpriteSW = floor_metal_01.dds
SpriteNW = floor_metal_01.dds
guilevel = 1
guiindex = 10
type = COMPONENT
locked = 0
name = category_advanced_manufacturing
parent

[task]
SpriteNE = floor_metal_01.dds
SpriteSE = floor_metal_01.dds
SpriteSW = floor_metal_01.dds
SpriteNW = floor_metal_01.dds
guilevel = 1
guiindex = 9
type = COMPONENT
locked = 0
name = category_facilities
parent

[task]
tilelable
SpriteNE = conveyor_NE.dds
SpriteSE = conveyor_SE.dds
SpriteSW = conveyor_SW.dds
SpriteNW = conveyor_NW.dds
exitdirectionoffsets = 0
inputdirectionoffsets = 2
guilevel = 1
parent
guiindex = 0.5
name = task_conveyor
is_conveyor = 1

[components]

[resources]

[subtasksrequired]

[subtasksapplied]

[tile]
texture = conveyor_SE.dds

[task]
tilelable
SpriteNE = conveyor_converge3_NE.dds
SpriteSE = conveyor_converge3_SE.dds
SpriteSW = conveyor_converge3_SW.dds
SpriteNW = conveyor_converge3_NW.dds
exitdirectionoffsets = 0,
inputdirectionoffsets = 1,2,3
guilevel = -1
parent
guiindex = 1
name = task_conveyor_converge3
is_conveyor = 1

[components]

[resources]

[subtasksrequired]

[subtasksapplied]

[tile]
texture = conveyor_converge3_SE.dds

[task]
tilelable
SpriteNE = conveyor_crossover_NE.dds
SpriteSE = conveyor_crossover_SE.dds
SpriteSW = conveyor_crossover_SW.dds
SpriteNW = conveyor_crossover_NW.dds
exitdirectionoffsets = 0,3
inputdirectionoffsets = 1,2
guilevel = -1
parent
guiindex = 1
name = task_conveyor_crossover
is_conveyor = 1

[components]

[resources]

[subtasksrequired]

[subtasksapplied]

[tile]
texture = conveyor_crossover_SE.dds

[task]
tilelable
SpriteNE = conveyor_left_NE.dds
SpriteSE = conveyor_left_SE.dds
SpriteSW = conveyor_left_SW.dds
SpriteNW = conveyor_left_NW.dds
exitdirectionoffsets = 3
inputdirectionoffsets = 2
guilevel = -1
parent
guiindex = 1
name = task_conveyor_left
is_conveyor = 1

[components]

[resources]

[subtasksrequired]

[subtasksapplied]

[tile]
texture = conveyor_left_SE.dds

[task]
tilelable
SpriteNE = conveyor_right_NE.dds
SpriteSE = conveyor_right_SE.dds
SpriteSW = conveyor_right_SW.dds
SpriteNW = conveyor_right_NW.dds
exitdirectionoffsets = 1
inputdirectionoffsets = 2
guilevel = -1
parent
guiindex = 1
name = task_conveyor_right
is_conveyor = 1

[components]

[resources]

[subtasksrequired]

[subtasksapplied]

[tile]
texture = conveyor_right_SE.dds

[task]
tilelable
SpriteNE = conveyor_split3_NE.dds
SpriteSE = conveyor_split3_SE.dds
SpriteSW = conveyor_split3_SW.dds
SpriteNW = conveyor_split3_NW.dds
exitdirectionoffsets = 0,1,3
inputdirectionoffsets = 2
guilevel = -1
parent
guiindex = 1
name = task_conveyor_split3
is_conveyor = 1

[components]

[resources]

[subtasksrequired]

[subtasksapplied]

[tile]
texture = conveyor_split3_SE.dds

[task]
tilelable
SpriteNE = conveyor_t_NE.dds
SpriteSE = conveyor_t_SE.dds
SpriteSW = conveyor_t_SW.dds
SpriteNW = conveyor_t_NW.dds
exitdirectionoffsets = 3,1
inputdirectionoffsets = 2
guilevel = -1
parent
guiindex = 1
name = task_conveyor_t
is_conveyor = 1

[components]

[resources]

[subtasksrequired]

[subtasksapplied]

[tile]
texture = conveyor_t_SE.dds

[task]
tilelable
SpriteNE = conveyor_t_join_NE.dds
SpriteSE = conveyor_t_join_SE.dds
SpriteSW = conveyor_t_join_SW.dds
SpriteNW = conveyor_t_join_NW.dds
exitdirectionoffsets = 0
inputdirectionoffsets = 1,3
guilevel = -1
parent
guiindex = 1
name = task_conveyor_t_join
is_conveyor = 1

[components]

[resources]

[subtasksrequired]

[subtasksapplied]

[tile]
texture = conveyor_t_join_SE.dds

[task]
tilelable
SpriteNE = conveyor_t_join_left_NE.dds
SpriteSE = conveyor_t_join_left_SE.dds
SpriteSW = conveyor_t_join_left_SW.dds
SpriteNW = conveyor_t_join_left_NW.dds
exitdirectionoffsets = 0
inputdirectionoffsets = 2,3
guilevel = -1
parent
guiindex = 1
name = task_conveyor_t_join_left
is_conveyor = 1

[components]

[resources]

[subtasksrequired]

[subtasksapplied]

[tile]
texture = conveyor_t_join_left_SE.dds

[task]
tilelable
SpriteNE = conveyor_t_join_right_NE.dds
SpriteSE = conveyor_t_join_right_SE.dds
SpriteSW = conveyor_t_join_right_SW.dds
SpriteNW = conveyor_t_join_right_NW.dds
exitdirectionoffsets = 0
inputdirectionoffsets = 1,2
guilevel = -1
parent
guiindex = 1
name = task_conveyor_t_join_right
is_conveyor = 1

[components]

[resources]

[subtasksrequired]

[subtasksapplied]

[tile]
texture = conveyor_t_join_right_SE.dds

[task]
tilelable
SpriteNE = conveyor_t_left_NE.dds
SpriteSE = conveyor_t_left_SE.dds
SpriteSW = conveyor_t_left_SW.dds
SpriteNW = conveyor_t_left_NW.dds
exitdirectionoffsets = 0,3
inputdirectionoffsets = 2
guilevel = -1
parent
guiindex = 1
name = task_conveyor_t_left
is_conveyor = 1

[components]

[resources]

[subtasksrequired]

[subtasksapplied]

[tile]
texture = conveyor_t_left_SE.dds

[task]
tilelable
SpriteNE = conveyor_t_right_NE.dds
SpriteSE = conveyor_t_right_SE.dds
SpriteSW = conveyor_t_right_SW.dds
SpriteNW = conveyor_t_right_NW.dds
exitdirectionoffsets = 0,1
inputdirectionoffsets = 2
guilevel = -1
parent
guiindex = 1
name = task_conveyor_t_right
is_conveyor = 1

[components]

[resources]

[subtasksrequired]

[subtasksapplied]

[tile]
texture = conveyor_t_right_SE.dds

所需输出

[task]
SpriteNE = floor_metal_01.dds
SpriteSE = floor_metal_01.dds
SpriteSW = floor_metal_01.dds
SpriteNW = floor_metal_01.dds
guilevel = 1
guiindex = 10
type = COMPONENT
locked = 0
name = category_advanced_manufacturing
parent

[task]
SpriteNE = floor_metal_01.dds
SpriteSE = floor_metal_01.dds
SpriteSW = floor_metal_01.dds
SpriteNW = floor_metal_01.dds
guilevel = 1
guiindex = 9
type = COMPONENT
locked = 0
name = category_facilities
parent

[task]
tilelable
SpriteNE = conveyor_NE.dds
SpriteSE = conveyor_SE.dds
SpriteSW = conveyor_SW.dds
SpriteNW = conveyor_NW.dds
exitdirectionoffsets = 0
inputdirectionoffsets = 2
guilevel = 1
parent
guiindex = 0.5
name = task_conveyor
is_conveyor = 1

[components]

[resources]

[subtasksrequired]

[subtasksapplied]

[tile]
texture = conveyor_SE.dds

[task]
tilelable
SpriteNE = conveyor_converge3_NE.dds
SpriteSE = conveyor_converge3_SE.dds
SpriteSW = conveyor_converge3_SW.dds
SpriteNW = conveyor_converge3_NW.dds
exitdirectionoffsets = 0,
inputdirectionoffsets = 1,2,3
guilevel = -1
parent
guiindex = 1
name = task_conveyor_converge3
is_conveyor = 1

[components]

[resources]

[subtasksrequired]

[subtasksapplied]

[tile]
texture = conveyor_converge3_SE.dds

[task]
tilelable
SpriteNE = conveyor_crossover_NE.dds
SpriteSE = conveyor_crossover_SE.dds
SpriteSW = conveyor_crossover_SW.dds
SpriteNW = conveyor_crossover_NW.dds
exitdirectionoffsets = 0,3
inputdirectionoffsets = 1,2
guilevel = -1
parent
guiindex = 1
name = task_conveyor_crossover
is_conveyor = 1

[components]

[resources]

[subtasksrequired]

[subtasksapplied]

[tile]
texture = conveyor_crossover_SE.dds

[task]
tilelable
SpriteNE = conveyor_left_NE.dds
SpriteSE = conveyor_left_SE.dds
SpriteSW = conveyor_left_SW.dds
SpriteNW = conveyor_left_NW.dds
exitdirectionoffsets = 3
inputdirectionoffsets = 2
guilevel = -1
parent
guiindex = 1
name = task_conveyor_left
is_conveyor = 1

[components]

[resources]

[subtasksrequired]

[subtasksapplied]

[tile]
texture = conveyor_left_SE.dds

[task]
tilelable
SpriteNE = conveyor_right_NE.dds
SpriteSE = conveyor_right_SE.dds
SpriteSW = conveyor_right_SW.dds
SpriteNW = conveyor_right_NW.dds
exitdirectionoffsets = 1
inputdirectionoffsets = 2
guilevel = -1
parent
guiindex = 1
name = task_conveyor_right
is_conveyor = 1

[components]

[resources]

[subtasksrequired]

[subtasksapplied]

[tile]
texture = conveyor_right_SE.dds

[task]
tilelable
SpriteNE = conveyor_split3_NE.dds
SpriteSE = conveyor_split3_SE.dds
SpriteSW = conveyor_split3_SW.dds
SpriteNW = conveyor_split3_NW.dds
exitdirectionoffsets = 0,1,3
inputdirectionoffsets = 2
guilevel = -1
parent
guiindex = 1
name = task_conveyor_split3
is_conveyor = 1

[components]

[resources]

[subtasksrequired]

[subtasksapplied]

[tile]
texture = conveyor_split3_SE.dds

[task]
tilelable
SpriteNE = conveyor_t_NE.dds
SpriteSE = conveyor_t_SE.dds
SpriteSW = conveyor_t_SW.dds
SpriteNW = conveyor_t_NW.dds
exitdirectionoffsets = 3,1
inputdirectionoffsets = 2
guilevel = -1
parent
guiindex = 1
name = task_conveyor_t
is_conveyor = 1

[components]

[resources]

[subtasksrequired]

[subtasksapplied]

[tile]
texture = conveyor_t_SE.dds

[task]
tilelable
SpriteNE = conveyor_t_join_NE.dds
SpriteSE = conveyor_t_join_SE.dds
SpriteSW = conveyor_t_join_SW.dds
SpriteNW = conveyor_t_join_NW.dds
exitdirectionoffsets = 0
inputdirectionoffsets = 1,3
guilevel = -1
parent
guiindex = 1
name = task_conveyor_t_join
is_conveyor = 1

[components]

[resources]

[subtasksrequired]

[subtasksapplied]

[tile]
texture = conveyor_t_join_SE.dds

[task]
tilelable
SpriteNE = conveyor_t_join_left_NE.dds
SpriteSE = conveyor_t_join_left_SE.dds
SpriteSW = conveyor_t_join_left_SW.dds
SpriteNW = conveyor_t_join_left_NW.dds
exitdirectionoffsets = 0
inputdirectionoffsets = 2,3
guilevel = -1
parent
guiindex = 1
name = task_conveyor_t_join_left
is_conveyor = 1

[components]

[resources]

[subtasksrequired]

[subtasksapplied]

[tile]
texture = conveyor_t_join_left_SE.dds

[task]
tilelable
SpriteNE = conveyor_t_join_right_NE.dds
SpriteSE = conveyor_t_join_right_SE.dds
SpriteSW = conveyor_t_join_right_SW.dds
SpriteNW = conveyor_t_join_right_NW.dds
exitdirectionoffsets = 0
inputdirectionoffsets = 1,2
guilevel = -1
parent
guiindex = 1
name = task_conveyor_t_join_right
is_conveyor = 1

[components]

[resources]

[subtasksrequired]

[subtasksapplied]

[tile]
texture = conveyor_t_join_right_SE.dds

[task]
tilelable
SpriteNE = conveyor_t_left_NE.dds
SpriteSE = conveyor_t_left_SE.dds
SpriteSW = conveyor_t_left_SW.dds
SpriteNW = conveyor_t_left_NW.dds
exitdirectionoffsets = 0,3
inputdirectionoffsets = 2
guilevel = -1
parent
guiindex = 1
name = task_conveyor_t_left
is_conveyor = 1

[components]

[resources]

[subtasksrequired]

[subtasksapplied]

[tile]
texture = conveyor_t_left_SE.dds

[task]
tilelable
SpriteNE = conveyor_t_right_NE.dds
SpriteSE = conveyor_t_right_SE.dds
SpriteSW = conveyor_t_right_SW.dds
SpriteNW = conveyor_t_right_NW.dds
exitdirectionoffsets = 0,1
inputdirectionoffsets = 2
guilevel = -1
parent
guiindex = 1
name = task_conveyor_t_right
is_conveyor = 1

[components]

[resources]

[subtasksrequired]

[subtasksapplied]

[tile]
texture = conveyor_t_right_SE.dds
每个[task].*都是一个新文件,因此由这些文件分隔成一列中的一个单元格,并使用换行符(
\n
)作为内部分隔符

换句话说,[task]之后直到下一个[task](或列末尾,如果没有更多的[task])的所有内容都合并到一个单元格中

只是必须是数组形式的,并且避免像concat这样的函数50000个字符的字符限制


电流输出

[task]
SpriteNE = floor_metal_01.dds
SpriteSE = floor_metal_01.dds
SpriteSW = floor_metal_01.dds
SpriteNW = floor_metal_01.dds
guilevel = 1
guiindex = 10
type = COMPONENT
locked = 0
name = category_advanced_manufacturing
parent

[task]
SpriteNE = floor_metal_01.dds
SpriteSE = floor_metal_01.dds
SpriteSW = floor_metal_01.dds
SpriteNW = floor_metal_01.dds
guilevel = 1
guiindex = 9
type = COMPONENT
locked = 0
name = category_facilities
parent

[task]
tilelable
SpriteNE = conveyor_NE.dds
SpriteSE = conveyor_SE.dds
SpriteSW = conveyor_SW.dds
SpriteNW = conveyor_NW.dds
exitdirectionoffsets = 0
inputdirectionoffsets = 2
guilevel = 1
parent
guiindex = 0.5
name = task_conveyor
is_conveyor = 1

[components]

[resources]

[subtasksrequired]

[subtasksapplied]

[tile]
texture = conveyor_SE.dds

[task]
tilelable
SpriteNE = conveyor_converge3_NE.dds
SpriteSE = conveyor_converge3_SE.dds
SpriteSW = conveyor_converge3_SW.dds
SpriteNW = conveyor_converge3_NW.dds
exitdirectionoffsets = 0,
inputdirectionoffsets = 1,2,3
guilevel = -1
parent
guiindex = 1
name = task_conveyor_converge3
is_conveyor = 1

[components]

[resources]

[subtasksrequired]

[subtasksapplied]

[tile]
texture = conveyor_converge3_SE.dds

[task]
tilelable
SpriteNE = conveyor_crossover_NE.dds
SpriteSE = conveyor_crossover_SE.dds
SpriteSW = conveyor_crossover_SW.dds
SpriteNW = conveyor_crossover_NW.dds
exitdirectionoffsets = 0,3
inputdirectionoffsets = 1,2
guilevel = -1
parent
guiindex = 1
name = task_conveyor_crossover
is_conveyor = 1

[components]

[resources]

[subtasksrequired]

[subtasksapplied]

[tile]
texture = conveyor_crossover_SE.dds

[task]
tilelable
SpriteNE = conveyor_left_NE.dds
SpriteSE = conveyor_left_SE.dds
SpriteSW = conveyor_left_SW.dds
SpriteNW = conveyor_left_NW.dds
exitdirectionoffsets = 3
inputdirectionoffsets = 2
guilevel = -1
parent
guiindex = 1
name = task_conveyor_left
is_conveyor = 1

[components]

[resources]

[subtasksrequired]

[subtasksapplied]

[tile]
texture = conveyor_left_SE.dds

[task]
tilelable
SpriteNE = conveyor_right_NE.dds
SpriteSE = conveyor_right_SE.dds
SpriteSW = conveyor_right_SW.dds
SpriteNW = conveyor_right_NW.dds
exitdirectionoffsets = 1
inputdirectionoffsets = 2
guilevel = -1
parent
guiindex = 1
name = task_conveyor_right
is_conveyor = 1

[components]

[resources]

[subtasksrequired]

[subtasksapplied]

[tile]
texture = conveyor_right_SE.dds

[task]
tilelable
SpriteNE = conveyor_split3_NE.dds
SpriteSE = conveyor_split3_SE.dds
SpriteSW = conveyor_split3_SW.dds
SpriteNW = conveyor_split3_NW.dds
exitdirectionoffsets = 0,1,3
inputdirectionoffsets = 2
guilevel = -1
parent
guiindex = 1
name = task_conveyor_split3
is_conveyor = 1

[components]

[resources]

[subtasksrequired]

[subtasksapplied]

[tile]
texture = conveyor_split3_SE.dds

[task]
tilelable
SpriteNE = conveyor_t_NE.dds
SpriteSE = conveyor_t_SE.dds
SpriteSW = conveyor_t_SW.dds
SpriteNW = conveyor_t_NW.dds
exitdirectionoffsets = 3,1
inputdirectionoffsets = 2
guilevel = -1
parent
guiindex = 1
name = task_conveyor_t
is_conveyor = 1

[components]

[resources]

[subtasksrequired]

[subtasksapplied]

[tile]
texture = conveyor_t_SE.dds

[task]
tilelable
SpriteNE = conveyor_t_join_NE.dds
SpriteSE = conveyor_t_join_SE.dds
SpriteSW = conveyor_t_join_SW.dds
SpriteNW = conveyor_t_join_NW.dds
exitdirectionoffsets = 0
inputdirectionoffsets = 1,3
guilevel = -1
parent
guiindex = 1
name = task_conveyor_t_join
is_conveyor = 1

[components]

[resources]

[subtasksrequired]

[subtasksapplied]

[tile]
texture = conveyor_t_join_SE.dds

[task]
tilelable
SpriteNE = conveyor_t_join_left_NE.dds
SpriteSE = conveyor_t_join_left_SE.dds
SpriteSW = conveyor_t_join_left_SW.dds
SpriteNW = conveyor_t_join_left_NW.dds
exitdirectionoffsets = 0
inputdirectionoffsets = 2,3
guilevel = -1
parent
guiindex = 1
name = task_conveyor_t_join_left
is_conveyor = 1

[components]

[resources]

[subtasksrequired]

[subtasksapplied]

[tile]
texture = conveyor_t_join_left_SE.dds

[task]
tilelable
SpriteNE = conveyor_t_join_right_NE.dds
SpriteSE = conveyor_t_join_right_SE.dds
SpriteSW = conveyor_t_join_right_SW.dds
SpriteNW = conveyor_t_join_right_NW.dds
exitdirectionoffsets = 0
inputdirectionoffsets = 1,2
guilevel = -1
parent
guiindex = 1
name = task_conveyor_t_join_right
is_conveyor = 1

[components]

[resources]

[subtasksrequired]

[subtasksapplied]

[tile]
texture = conveyor_t_join_right_SE.dds

[task]
tilelable
SpriteNE = conveyor_t_left_NE.dds
SpriteSE = conveyor_t_left_SE.dds
SpriteSW = conveyor_t_left_SW.dds
SpriteNW = conveyor_t_left_NW.dds
exitdirectionoffsets = 0,3
inputdirectionoffsets = 2
guilevel = -1
parent
guiindex = 1
name = task_conveyor_t_left
is_conveyor = 1

[components]

[resources]

[subtasksrequired]

[subtasksapplied]

[tile]
texture = conveyor_t_left_SE.dds

[task]
tilelable
SpriteNE = conveyor_t_right_NE.dds
SpriteSE = conveyor_t_right_SE.dds
SpriteSW = conveyor_t_right_SW.dds
SpriteNW = conveyor_t_right_NW.dds
exitdirectionoffsets = 0,1
inputdirectionoffsets = 2
guilevel = -1
parent
guiindex = 1
name = task_conveyor_t_right
is_conveyor = 1

[components]

[resources]

[subtasksrequired]

[subtasksapplied]

[tile]
texture = conveyor_t_right_SE.dds
获取行号

$D$1:D
是输入列

$G$1
是下拉列表,选择了
“[task]”

$M$1 =ARRAYFORMULA(QUERY({$D1:$D, row($D1:$D)},"select * where Col1 = '"&$G$1&"'"))

然后我尝试使用这些数字


有效,必须通过拖动,并且没有任何分隔符

=ARRAYFORMULA(连接(间接($D“&$O1:$O&“:$D“&P1:$p-1))


不起作用,我不断地为公式添加更多的数组,但仍然只是第一个结果

=ARRAYFORMULA(IF($P1:p)”,串联(ARRAYFORMULA(间接($D)&ARRAYFORMULA(间接($O)&IF($P1:$p)”,行($P1:$p),“”)和“:$O”),:$D”&ARRAYFORMULA(间接($p)&IF($P1:$p),行($P1:$p),“”)和“:$p”)-1)),“”)


只是前面间接使用的字符串

=ARRAYFORMULA(IF($O1:O“,$D“)和ARRAYFORMULA(间接($O“&IF($P1:$p)”,行($P1:$p),“”)和“:$D”&ARRAYFORMULA(间接($p“,$P1:$p“,”)和“:$p”)-1“)


不起作用,有分隔符,但仍然只循环第一个结果

$U1:U
是间接项的字符串列表(见上文)

=ARRAYFORMULA(IF($U1:U),TEXTJOIN(;),FALSE,INDIRECT($U1:U)),“”)


在示例表中还有一些其他公式,我在继续进行的过程中基本上去掉了无用的东西

我在那里找到了很多有趣的资源,但似乎没有什么是使用行号作为目标的,甚至仅仅是允许
ARRAYFORMULA
并避免了单个CONCAT或类似调用的50000字符限制问题)。

尝试:

=ARRAYFORMULA(SPLIT(TRANSPOSE(SPLIT(QUERY(
 IF(A2:A="[task]", "♦"&A2:A, "♀"&A2:A),,999^99), "♦", )), "♀"))

正如我之前在评论中所说的,这是一个示例,您只需调用单元格“=GroupMacro”中的函数。不幸的是,这不能自动刷新:

var rtrn=[];
var rslt=[];
var rslt2='';

function GroupMacro() {
  var spreadsheet = SpreadsheetApp.getActive();
  var bomo=spreadsheet.getRange('D1:D' + spreadsheet.getLastRow()).getValues();
  for (a=0; a<bomo.length; a++)
  {
    if(bomo[a]=='test') //this is separator, this can be applied as parameter in function
    {
      if(a>0)
      {
         rslt2=rslt.join();
         rtrn.push(rslt2);
         rslt=[];
      }
      rslt.push(bomo[a]);
    }
    else
    {
      rslt.push(bomo[a]);
    }
  }
  rslt2=rslt.join();
  rtrn.push(rslt2);
  return rtrn;
};
var rtrn=[];
var rslt=[];
var rslt2='';
函数GroupMacro(){
var电子表格=SpreadsheetApp.getActive();
var bomo=spreadsheet.getRange('D1:D'+spreadsheet.getLastRow()).getValues();
对于(a=0;a0)
{
rslt2=rslt.join();
rtrn.push(rslt2);
rslt=[];
}
rslt.push(bomo[a]);
}
其他的
{
rslt.push(bomo[a]);
}
}
rslt2=rslt.join();
rtrn.push(rslt2);
返回rtrn;
};

EDIT-在描述和示例电子表格中添加了textjoin公式,它有分隔符,但仍然循环第一个结果。如果允许使用宏,则更容易function@user11982798-我不熟悉这些,我用谷歌脚本和公式做了一些工作,试图让它尽可能的即插即用,没有脚本权限或libraries或任何东西。欢迎您提供一个宏答案,如果您有一个,我可能不接受它,如果不匹配最终用例,但如果看起来很好,我将继续投票。我已经制作了宏,如我的回答中所示。当我回到这个项目时,我将检查这个问题,可能无法接受作为答案,但如果效果很好,我将继续投票,以便其他人在搜索时注意到它他们自己:)好的,这个脚本实际上工作得非常好。我没有费心创建宏,只是添加到脚本中作为自定义公式运行,所以很可能会在页面刷新时刷新,尽管不要引用。正如我所说的,虽然不能接受作为答案,因为不回答OP,def-worth-upvote虽然可能会帮助其他人,特别是作为非常简单的google将展示如何将这些变量(范围和分隔符)更改为公式参数或输入提示。感谢伟大的示例看起来很好,另一个项目正在进行中,因此尚未测试,但是如果知道是否可以修改以虚拟方式合并这些列(无需让它们打印然后通过分隔公式合并),那将非常好所以输出只是像OP要求的那样的单列?这样就不需要单独的表格,也不需要考虑可变的列数。@DanielBrose谢谢你的链接,我知道。我现在说的是,我现在非常快地测试了它,而它做了你说的,我的反馈是它没有回答OP,所以还不能接受它。如果你可以的话n调整它,以便输出到单个列,然后