Форматирование в replaceText () - PullRequest
0 голосов
/ 12 мая 2018

У меня doc.getBody().replaceText(oldregex,newstring) нормально работает в скрипте Google Document в минуту, и я надеялся установить какой-нибудь жирный / курсив на newstring.Это выглядит сложнее, чем я думал.Кто-нибудь нашел аккуратный способ сделать это?

В настоящее время я думаю, что мне нужно ...

  • Создать новый текст как диапазон с rangeBuilder
  • Найти старый текст и выбрать его в качестве диапазона (каким-то образом ...)
  • Очистить диапазон старого текста и вставить диапазон нового текста в месте поиска

Этокажется, что много работы для чего-то, что было бы тривиально с HTML-подобными тегами.Я определенно что-то упускаю.Буду очень признателен за любые предложения.

1 Ответ

0 голосов
/ 12 мая 2018

Поскольку replaceText изменяет только текстовое содержимое, оставляя форматирование на месте, цель может быть достигнута путем применения форматирования перед заменой. Во-первых, findText просматривает текст и устанавливает жирным шрифтом для каждого совпадения; затем replaceText выполняет замену.

Необходимо рассмотреть два случая: сопоставляется только часть текста в элементе (что типично) и сопоставляется весь элемент. Свойство isPartial класса RangeElement различает их.

function replaceWithBold(pattern, newString) {
  var body = DocumentApp.getActiveDocument().getBody();
  var found = body.findText(pattern);
  while (found) {
    var elem = found.getElement();
    if (found.isPartial()) {
      var start = found.getStartOffset();
      var end = found.getEndOffsetInclusive();
      elem.setBold(start, end, true);
    }
    else {
      elem.setBold(true);
    }
    found = body.findText(pattern, newString);
  }
  body.replaceText(pattern, newString);
}

Это похоже на большую работу для чего-то, что было бы тривиальным

Это правильно и типично для работы с Документами Google с использованием Apps Script.

...