Замена новой строки (\ n) в Документах Google - PullRequest
0 голосов
/ 23 марта 2020

Попытка заменить две или более новых строк на одну. Do c имеет изображения.

Сначала я пытаюсь сделать строку:

var body = DocumentApp.getActiveDocument().getBody();
body.replaceText("\\n{2,}", '\n');

Но метод скрипта Apps replaceText не принимает escape-символы.

Затем я попытался Вот это:

var body = DocumentApp.getActiveDocument().getBody();
var bodyText = body.getText();
bodyText = bodyText.replace(/\n{2,}/, "\n");
body.setText(bodyText);

Работает, но все изображения отсутствовали.

Как заменить символы новой строки на сохраненные изображения Do c?

1 Ответ

2 голосов
/ 23 марта 2020

Проблема:

В документах Google абзацы разделены \n (переводы строки). Абзац не может содержать новую строку. Любой символ новой строки внутри абзаца преобразуется в \r. Документация replaceText гласит:

Предоставленный шаблон регулярного выражения независимо сопоставляется с каждым текстовым блоком , содержащимся в текущем элементе.

Таким образом, \n нельзя использовать, поскольку текстовый блок (часть абзаца) не может содержать \n.

Решение:

Один из способов рассмотреть последующие новые строки - рассмотреть их как пустые абзацы:

  • абзацев без дочерних элементов и
  • , чьи текст пустой

В этой заметке мы можем удалить эти пустые абзацы:

Фрагмент:

function removeEmptyParagraphs() {
  DocumentApp.getActiveDocument()
    .getBody()
    .getParagraphs()
    .forEach(para => {
      const numChild = para.getNumChildren();
      const txt = para.getText();
      if (numChild === 0 && txt === '') para.removeFromParent();
    });
}

Ссылки:

...