如图,想要将B3里的这几段文字,拆分成A列一行一行,每行字符数最多为42个,同时每段段首要缩进,遇到段落要换行。公式如下:
=DROP(REDUCE(" "&SUBSTITUTE(B3,CHAR(10),CHAR(10)&" "),SEQUENCE(20),LAMBDA(x,y,LET(
n,MID(TAKE(x,1),1,42),
m,IF(ISNUMBER(FIND(CHAR(10),n)),MID(TAKE(x,1),1,FIND(CHAR(10),n)),n),
VSTACK(SUBSTITUTE(x,m,""),m)))),1)
公式思路:公式使用reduce函数解决问题,其中初始值设定为:
" "&SUBSTITUTE(B3,CHAR(10),CHAR(10)&" "),意思是为每一段加段首空格。利用char(10)的段尾标记为下一段添加段首空格。
变量n:选取变量x的第一行,从第一个开始,提取42个字符。
变量m:判断n提取的字符串中是否含有char(10),也就是断行符号。如果有,则从第一个开始提取到断行符处。没有就用n的取值。
VSTACK(SUBSTITUTE(x,m,""),m)))),1):将提取的字符串m从x中删除,以便下一次循环时提取一下断。然后将删除后的作为第一行,提取的字符m作为第二行,形成新的x。
reduce的二参起着控制循环次数的作用,并不参与运算。
评论 (0)