Измените цвет слова, где находится курсор, с помощью Google Apps Script в документе Google - PullRequest
0 голосов
/ 04 февраля 2020

Я пытаюсь изменить цвет слова, над которым находится текущий курсор Google Документов (когда выполняется функция сервера). Я не уверен, как это сделать. Я видел: Получить текущее слово в google-apps-script , которое объясняло, как получить последнее слово в строке, но это не сработало, вот что у меня есть (очень грубый код):

function clientize() {///
  var t = Date.now();
  var doc = DocumentApp.getActiveDocument().getCursor();
  var els = doc.getElement();
  var txt = els.asText().getText().split(" ");
  var word = txt[txt.length - 1];
  var offset = doc.getOffset();
  var highlightStyle = {};
  highlightStyle[DocumentApp.Attribute.FOREGROUND_COLOR] = '#FF0000';
  els.setBold(offset - 5,offset , true)
 // els.setAttributes(4,10,highlightStyle);

  return (word)
}

, но он дает мне только последнее слово в строке, а не слово, в котором находится курсор, а также я не знаю, как изменить цвет слова в документе, как только я найти текст. Я знаю, что могу изменить цвет на основе определенного диапазона, но он работает только с getElement (), но как мне изменить указанный диапазон c всего слова, на котором находится курсор?

Например, скажем, у меня есть строка с курсором:

hello world ho|w are you today

затем, когда я активирую функцию сервера, только слово «как» должно быть изменено, например, на красный .

Как это возможно ????

1 Ответ

1 голос
/ 04 февраля 2020

enter image description here

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

function clientize() {

  // Get the Position of the user's cursor
  var position = DocumentApp.getActiveDocument().getCursor();

  // Get the element that contains this Position
  var ref_element = position.getElement();

  // Get the text in the element
  var text = ref_element.asText().getText(); 

  // Get the cursor's relative location within ref_element.
  // Verify if cursor is within text elem. or paragraph elem.
  var ref_offset = position.getOffset();
  if (ref_element.getType() == DocumentApp.ElementType.PARAGRAPH){

    // Cursor is at beginning or end of line
    if (ref_offset == 1){

      // Cursor is at last word. Move to the left into TEXT
      ref_offset = text.length - 1;

    }
  }

  // Get offset for current word's initial char
  var offset_first = ref_offset - text.substring(0,ref_offset).split(" ")[text.substring(0,ref_offset).split(" ").length - 1].length;

  // Get how many chars to the end of current word
  var chars_to_end;
  if (text.substring(ref_offset, ref_offset + text.length - 1).indexOf(" ") > -1) {

    // if word has a trailing space exclude it from count
    chars_to_end = text.substring(ref_offset, ref_offset + text.length - 1).indexOf(" ");

  } else {
    chars_to_end = text.substring(ref_offset, ref_offset + text.length - 1).length - 1;
  }

  // Get offset for current word's last char
  var offset_last = ref_offset + chars_to_end;

  // Define the styling attributes
  var style = {};
  style[DocumentApp.Attribute.FOREGROUND_COLOR] = '#FF00FF';

  // Apply styling to current word
  ref_element.asText().setAttributes(offset_first, offset_last, style);
}

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

Также для справки ключевая функция здесь: setAttributes(startOffset, endOffsetInclusive, attributes)

Обратите внимание, что существует множество способов go об этом, это только один из способов достижения этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...