简体   繁体   中英

How can I split a phrase into a new line every x characters on Google Sheets?

I am translating a game, and the game's text box only supports 50 characters max per line. Is there a way to use a formula to split the entire sentence every 50 characters or whole word (49, 48, 47, etc)?

I am currently working with this formula.

=JOIN(CHAR(10),SPLIT(REGEXREPLACE(A1, "(.{50})", "/$1"),"/"))

The problem with this code, is that it splits at exactly 50 characters (one time), and will split in the middle of the word.

So again, my goal is to have it not split on the 50th character IF the 50th character is in the middle of the word, and for the rule to apply for the rest of the lines too because it only applies on the first line.

Please take a look at this test google sheet to get an example of what I am talking about.

If it's impossible to do it on Google Sheets, I don't mind moving to Excel provided I get a functioning code.

For the record, I did ask in Google's product forums 2 days ago , and still haven't received an answer.

You are pretty close. I'm not an expert in Sheets, so not sure if this is the best way, but your Regex is wrong for what you want.

Also, you need to be certain that you don't use a split character that might appear in the phrase itself. However, using CHAR(10) for the replace character allows you to insert LF without going through the JOIN SPLIT sequence.

  1. replace any line feeds, carriage returns and spaces with a single space
  2. Match strings that start with a non-Space character followed by up to 49 more characters which are followed by a space or the end of the string.
  3. replace the capture group with the capturing group followed by the CHAR(10) (and delete the space following).

  4. There will be extra CHAR(10) at the end which you can strip off.

EDIT Regex changed slightly due to a difference in behavior between Google's RE and what I am used to (probably has to do with how a non-backtracking regex works). The problem showed up on your example:

=regexreplace(REGEXREPLACE(REGEXREPLACE(A1 & " ","[\r\n\s]+"," "),"(\S.{0,49})\s","$1" & char(10)),"\n+\z","")
  = REGEXEXTRACT(A1,"(?ism)^"&REPT("([\w\d'\(\),. ]{0,49}\s)", ROUNDUP(LEN(A1)/50,0))&"([\w\d'\(\),. ]{0,49})$")

Tested with various expressions and works as intended. Note that only these characters [a-zA-Z0-9_'(),.] are allowed, Which means - and other characters not mentioned will not work. If you need them, add them inside the REPT expression and finishing regexp formula. Otherwise, This will work perfectly.

=REGEXREPLACE(A1, "(.{1,50})\b", "$1" & CHAR(10))

{50} matches exactly 50 times, but what you need is 50 or less .

\\b is word boundary that matches between alphanumeric and non-alphanumeric character.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM