Home > front end >  finding Text with specific format and delete it
finding Text with specific format and delete it

Time:08-09

I have a big google doc file with over 100 pages(with tables etc) and there is some reference text in that document in multiple locations reference texts are highlighted with the color "grey", I want to have a function that can find those colors/style in the table or paragraph and delete it. So Step 1 is finding it, and then deleting(removing those texts from the document) it in one go.

How we did it in MS Word is, we created custom styles and assign those styles to those "Remarks Text"(in grey) and in VBA we look for text matching the style name, and if it returns true than we delete those texts. As much i know about doc, there is no option to create custom styles.

Here is the code I am trying:-

function removeText()
{
  var doc = DocumentApp.getActiveDocument()
  var body = doc.getBody()
  body.getParagraphs().map(r=> {
     if(r.getAttributes().BACKGROUND_COLOR === "#cccccc")
     {
        //Don't know what to do next, body.removeChild(r.getChild()) not working
     }
  })
}

Can you guide me on how I can achieve this effectively please.

Thanks

CodePudding user response:

Try this

body.getParagraphs().forEach( r => {
  if( r.getAttributes().BACKGROUND_COLOR === "#cccccc" ) {
    r.removeFromParent();
  }
}

Reference

Paragraph.removeFromParent()

CodePudding user response:

Google Apps Script hasn't a method to find text based on their style attributes, instead we need to get each part and in order to be able to get their attributes. The following example, if the format is applied to the whole paragraph, it is deleted, if not, it uses the regular expression for finding any single character ..

function removeHighlightedText() {

  // In case that we want to remove the hightlighting instead of deleting the content
  const style = {};
  style[DocumentApp.Attribute.BACKGROUND_COLOR] = null;

  const backgroundColor = '#cccccc';
  const doc = DocumentApp.getActiveDocument();
  
  const searchPattern = '.';

  let rangeElement = null;
  const rangeElements = [];
  doc.getParagraphs().forEach(paragraph => {
    if (paragraph.getAttributes().BACKGROUND_COLOR === backgroundColor) {
      paragraph.removeFromParent();
      // Remove highlighting
      // paragraph.setAttributes(style);
    } else {
      // Collect the rangeElements to be processed
      while (rangeElement = paragraph.findText(searchPattern, rangeElement)) {
        if (rangeElement != null && rangeElement.getStartOffset() != -1) {
          const element = rangeElement.getElement();
          if (element.getAttributes(rangeElement.getStartOffset()).BACKGROUND_COLOR === backgroundColor) {
            rangeElements.push(rangeElement)
          }
        }
      }
    }
  });

  // Process the collected rangeElements in reverse order (makes things easier when deleting content)
  rangeElements.reverse().forEach(r => {
    if (r != null && r.getStartOffset() != -1) {
      const element = r.getElement();
      // Remove text
      element.asText().deleteText(r.getStartOffset(), r.getEndOffsetInclusive())

      // Remove highlighting
      // element.setAttributes(textLocation.getStartOffset(), textLocation.getEndOffsetInclusive(), style);

    }
  });
}
  • Related