Пример кода здесь: https://docs.google.com/spreadsheets/d/1q4qRgXSq6xXhddArPCoBIuOOupRvokUd0andADCNN0Q/edit?usp=sharing
В столбце D3:D у меня есть текст длиной от 0 до 13 слов.
Я хочу поместить в столбец C код, который будет разделять этот текст на группы по 4 слова на ячейку по всей строке.
Если слов ноль, я хочу, чтобы это изящно завершилось неудачей. Если есть 12 или более слов, я хочу, чтобы после 12-го слова было добавлено «...» и обрезано строка, не используя больше столбцов.





Вы можете попробовать:
=map(A2:A,lambda(Λ,if (Λ = "",,let(Σ,split(reduce(Λ,{4,7,10},lambda(a,c,substitute(a," ","|",c))),"|"),
iferror(hstack(index(Σ,,1),index(Σ,,2),let(Δ,index(Σ,,3),if (len(iferror(index(Σ,,4))),Δ&"...",Δ))))))))
Вот возможное решение:
=ARRAYFORMULA(
LET(a,A2:A8,
q,REGEXREPLACE(
REGEXREPLACE(a,"((?:\w+ ){1,3}(?:\w+)?)|.","$1|"),
"\|*$",),
IF(a = "",,SPLIT(q&IF(REGEXREPLACE(q,"\|+"," ")=a,,"..."),"|"))))
Сначала мы разделяем каждую группу из максимум 4 слов с помощью трубы.
REGEXREPLACE(a,"((?:\w+ ){1,3}(?:\w+)?)|.","$1|")
Убираем висячие трубы
REGEXREPLACE(...,"\|*",)
Мы вызываем эту новую строку q и проверяем, равна ли эта строка с пробелами вместо труб значению в столбце A, если да, то возвращаем q, в противном случае возвращаем q&"..."
q&IF(REGEXREPLACE(q,"\|+"," ")=a,,"...")
Наконец, мы разделились по трубе
SPLIT(q&IF(REGEXREPLACE(q,"\|+"," ")=a,,"..."),"|")
=ARRAYFORMULA(
MAP(A2:A8,LAMBDA(a,
LET(w,IFNA(WRAPROWS(SPLIT(a," "),4)),
TOROW(TRIM(
BYROW(w,LAMBDA(r,JOIN(" ",r)))&
IF(ROWS(w)>3,IF(SEQUENCE(ROWS(w)-1)=3,"...",),)),2)))))
Разделите слова на группы по 4, используя WRAPROWS
IFNA(WRAPROWS(SPLIT(a," "),4)) ← w
Объедините их
BYROW(w,LAMBDA(r,JOIN(" ",r)))
Если групп слов более 3, т. е. если слов > 12, добавьте "..." в конец последней строки.
IF(ROWS(w)>3,IF(SEQUENCE(ROWS(w)-1)=3,"...",),)
Обрезаем результат и транспонируем его
TOROW(TRIM(...),2)
@Ми, можешь ли ты поделиться образцом, в котором продемонстрирована проблема?
Мне вообще-то только что удалось разобраться, если я напишу 21,53% без пробела, ему это не нравится, но если я напишу 21,53% с пробелом, то по какой-то причине это нормально. Спасибо, в любом случае :)
Я использовал альтернативное решение, которое отлично работает, однако оно удаляет знак процента и меняет число 0,2153 вместо 21,53%. Есть ли способ обойти это?