Очистить форматирование текста в слайдах с помощью скрипта Apps - PullRequest
0 голосов
/ 29 сентября 2018

У меня есть слайд с текстовым полем, а также различные формы.Мне нужно удалить форматирование всего текста внутри элементов страницы.

Удаление форматирования фактически восстанавливает исходное текстовое свойство на основе темы или мастера слайда

Я не нашел ни одной функции для очисткиформатирование и восстановление его в базовый формат.

Я пытался с,

setUnderline(false).setItalic(false).setBold(false).setStrikethrough(false)

Но, он не восстановит свой размер шрифта и семейство шрифтов, так как я не нашел способ получить заполнитель по умолчаниюfontsize и fontfamily.

Есть ли обходной путь?Как сбросить семейство шрифтов и размер шрифта?

ОБНОВЛЕНИЕ: (не работает)

text.getTextStyle().setUnderline(false).setItalic(false).setBold(false).setStrikethrough(false).setFontFamily("").setFontFamily("").setFontSize(null);

Это приведет к ошибке сервера

1 Ответ

0 голосов
/ 06 октября 2018

Как насчет этого обходного пути?Я думаю, что есть 2 модели для этой ситуации.От вашего вопроса в этом ответе он очищает форматы underline, italic, bold, strikethrough, fontFamily and fontSize.В этом ответе «очистить» означает, что он изменяет формат по умолчанию.

Обходной путь 1:

Использование служб слайдов.Сначала он получает значения по умолчанию стиля текста.В качестве примера поместите текстовое поле, содержащее текстовое значение, на слайд.В этом случае формат текстового значения не изменяется.С помощью Slides API стиль текста по умолчанию извлекается следующим образом.

"style": {
 "underline": false,
 "italic": false,
 "bold": false,
 "strikethrough": false,
 "fontFamily": "Arial",
 "fontSize": {
  "magnitude": 14,
  "unit": "PT"
 }
}

В этом временном решении эти значения используются в качестве значений по умолчанию.Пример сценария выглядит следующим образом.

Пример сценария:

В этом примере стили текста для PageElementType типов SHAPE и TABLE изменяются на форматы по умолчанию.

function toDefault(text) {
  if (text.getRange(0,1).asString().charCodeAt(0) != 10) {
    var style = text.getTextStyle();
    return style.setUnderline(false).setItalic(false).setBold(false).setStrikethrough(false).setFontFamily("Arial").setFontSize(14);
  }
  return null;
}

function myFunction() {
  var s = SlidesApp.getActivePresentation();
  var slide = s.getSlides()[0]; // As a sample, 1st page is used.
  var pageElements = slide.getPageElements();
  pageElements.forEach(function(e) {
    if (e.getPageElementType() == "SHAPE") {
      var text = e.asShape().getText(); 
      toDefault(text);
    } else if (e.getPageElementType() == "TABLE") {
      var table = e.asTable();
      for (var row = 0; row < table.getNumRows(); row++) {
        for (var col = 0; col < table.getNumColumns(); col++) {
          var text = table.getCell(row, col).getText();
          toDefault(text);
        }
      }
    }
  });
}

Обходной путь 2:

Использование API слайдов.Для updateTextStyle из Slides.Presentations.batchUpdate(), когда используется только "fields": "underline,italic,bold,strikethrough,fontFamily,fontSize" без установки каждого значения, используются значения по умолчанию underline,italic,bold,strikethrough,fontFamily,fontSize.В этом временном решении это используется.

Пример сценария:

В этом примере стили текста для PageElementType для SHAPE и TABLE изменяются на форматы по умолчанию.

function myFunction() {
  var s = SlidesApp.getActivePresentation();
  var slide = s.getSlides()[0];
  var presentationId = s.getId();
  var pageElements = slide.getPageElements();
  var reqs = pageElements.reduce(function(o, e) {
    if (e.getPageElementType() == "SHAPE") {
      if (e.asShape().getText().getRange(0,1).asString().charCodeAt(0) != 10) {
        o.push({"updateTextStyle": {"objectId": e.getObjectId(), "fields": "underline,italic,bold,strikethrough,fontFamily,fontSize"}});
      }
    } else if (e.getPageElementType() == "TABLE") {
      var table = e.asTable();
      var objectId = e.getObjectId();
      for (var row = 0; row < table.getNumRows(); row++) {
        for (var col = 0; col < table.getNumColumns(); col++) {
          var text = table.getCell(row, col).getText();
          if (text.getRange(0,1).asString().charCodeAt(0) != 10) {
            o.push({"updateTextStyle": {"objectId": e.getObjectId(), "cellLocation": {"columnIndex": row, "rowIndex": col}, "fields": "underline,italic,bold,strikethrough,fontFamily,fontSize"}});
          }
        }
      }
    }
    return o;
  }, []);
  var resource = {"requests": reqs};
  Slides.Presentations.batchUpdate(resource, presentationId);
}

Примечание:

  • Когда вы используете обходной путь 2, включите Slides API в Advanced Services и консоли API.
  • Если вы хотите очистить все форматы стиля текста,для обходного пути 2 измените значение с "fields": "underline,italic,bold,strikethrough,fontFamily,fontSize" на "fields": "*".

Ссылки:

...