0
votes

I am making a program that will show you the most commonly used words in your google docs document, and then highlight them. I want to have a menu button that when clicked, will un-highlight everything that is currently highlighted.

I couldn't find anybody who was doing something similar, so I tried doing something like this:

function onOpen() {
  var ui = DocumentApp.getUi();

  ui.createMenu("Extra Tools")
      .addItem('Clear Highlights', 'clear')
      )
  
  .addToUi();
}

function clear()
{
  var DocText = DocumentApp.getActiveDocument().getBody().getText();
  DocText.getElement().asText.setBackgroundColor("#FFFFFF");
}

but it didn't work, giving me the error "TypeError: Cannot find function getElement in object "

Is there a way to set the highlight/background color of the whole document to white/transparent?

1

1 Answers

0
votes

Try this:

function clearHighLight() {
  var bgcolor='#ffffff';//white
  var doc=DocumentApp.getActiveDocument();
  var rangeBuilder=doc.newRange();
  var bdy=doc.getBody();
  var numCh=bdy.getNumChildren();
  for (var i=0;i<numCh;i++) {
    var child=bdy.getChild(i);//collect all range elements
    var all=rangeBuilder.addElement(child);
  }
  doc.setSelection(all);
  var selectedElements = all.getRangeElements();
  for(var i=0;i<selectedElements.length;i++) {
    var selElem = selectedElements[i];
    var el = selElem.getElement();
    var isPartial = selElem.isPartial();
    if(isPartial) {
      var selStart = selElem.getStartOffset();
      var selEnd = selElem.getEndOffsetInclusive();
      el.asText().setBackgroundColor(selStart, selEnd, bgcolor)      
    }else {
      var selStart = selElem.getStartOffset();
      var selEnd = selElem.getEndOffsetInclusive();
      el.asText().setBackgroundColor(bgcolor);
    }
  }
  var rg=doc.newRange();
  rg.addElement(bdy.getChild(0));//child zero normally has nothing in it
  doc.setSelection(rg.build());
}