Создание текста радуги в Google Docs

var selectedElements = selection.getSelectedElements();
for (var i = 0; i < selectedElements.length; ++i) {
var selectedElement = selectedElements[i];

// Only modify elements that can be edited as text; skip images and other
// non-text elements.
var text = selectedElement.getElement().editAsText();

// Change the background color of the selected part of the element, or the
// full element if it's completely selected.
if (selectedElement.isPartial()) {
  text.setColor(selectedElement.getStartOffset(),
      selectedElement.getEndOffsetInclusive(), '#69359c');
    }
  }
}

Приведенный выше текст берет выделение внутри Google Doc и заменяет его на шестнадцатеричный код #69359c (темно-фиолетовый). Я искал много сайтов, много гитов и попросил многих друзей помочь с моим проектом.

Мой конечный проект такой:

  1. Создать меню для Документов Google с помощью моего селектора (ВЫПОЛНЕНО)
  2. Уметь выделять определенное количество текста и изменять его на массив цветов (ROY G. BIV / радуга).
  3. Формат должен быть только для Документов Google.

Если кто-нибудь может помочь мне, это будет высоко ценится.

2 ответа

Я только что нашел этот вопрос и с удовольствием предоставляю некоторый рабочий код из моего дополнения Rainbow Font Google Docs ( Magic Rainbow Unicorns).

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

Для целых выборов используйте этот код:

var elementText = element.editAsText();
if (elementText) {
  var paragraph = elementText.getText();
  for (var j = 0; j < paragraph.length; j++) {
    elementText.setForegroundColor(j, j, getNextRainbowColour(...));
  }
}

Для частичного выбора я использовал это:

var elementText = element.asText();
var startIndex = element.getStartOffset();
var endIndex = elements.getEndOffsetInclusive();
for (var j = startIndex; j < endIndex+1; j++) {
  elementText.setForegroundColor(j, j, getNextRainbowColour(...));
}

Вы уже достаточно близки к ответу. Попробуйте перебрать элементы в вашей "текстовой" переменной, чтобы вы могли изменить фон каждого элемента.

Вы можете использовать что-то вроде этого для перебора каждой буквы:

var letters =  elementText.getText();
for(var j = 0 ; j< letters.length-1; j++)
{
     elementText.setBackgroundColor(j, j+1, getRandomColor())
}

Вот пример функции для использования разных цветов:

function getRandomColor() {
   var letters = '0123456789ABCDEF'.split('');
   var color = '#';
   for (var i = 0; i < 6; i++ ) 
   {
       color += letters[Math.floor(Math.random() * 16)];
   }
   return color;
}

Ваш последний вопрос: поскольку класс Text не является частью Javascript, а является частью библиотеки app-script, он не будет работать вне среды Google.

Другие вопросы по тегам