Can I color certain words in Google Document using Google Apps Script?

后端 未结 4 2326
余生分开走
余生分开走 2020-11-30 03:44

I\'m trying to highlight certain words in my Google Document. I know I can replace text using document.replace, but it only replaces string itself, not formatting. Is there

4条回答
  •  甜味超标
    2020-11-30 04:12

    With the introduction of document-bound scripts, it's now possible to make a text highlighting function that's invoked from a custom menu.

    Surely THIS is the best answer now! 8^)

    This script was modified from the one in this answer, and may be called from the UI (with no parameters) or a script.

    /**
     * Find all matches of target text in current document, and highlight them.
     *
     * @param {String} target     (Optional) The text or regex to search for. 
     *                            See Body.findText() for details.
     * @param {String} background (Optional) The desired highlight color.
     *                            A default orange is provided.
     */
    function highlightText(target,background) {
      // If no search parameter was provided, ask for one
      if (arguments.length == 0) {
        var ui = DocumentApp.getUi();
        var result = ui.prompt('Text Highlighter',
          'Enter text to highlight:', ui.ButtonSet.OK_CANCEL);
        // Exit if user hit Cancel.
        if (result.getSelectedButton() !== ui.Button.OK) return;
        // else
        target = result.getResponseText();
      }
      var background = background || '#F3E2A9';  // default color is light orangish.
      var doc = DocumentApp.getActiveDocument();
      var bodyElement = DocumentApp.getActiveDocument().getBody();
      var searchResult = bodyElement.findText(target);
    
      while (searchResult !== null) {
        var thisElement = searchResult.getElement();
        var thisElementText = thisElement.asText();
    
        //Logger.log(url);
        thisElementText.setBackgroundColor(searchResult.getStartOffset(), searchResult.getEndOffsetInclusive(),background);
    
        // search for next match
        searchResult = bodyElement.findText(target, searchResult);
      }
    }
    
    /**
     * Create custom menu when document is opened.
     */
    function onOpen() {
      DocumentApp.getUi().createMenu('Custom')
          .addItem('Text Highlighter', 'highlightText')
    
          .addToUi();
    }
    

提交回复
热议问题