Tengo el siguiente script ejecutándose donde necesita buscar en todo el documento de Google las palabras específicas que he elegido y resaltarlas dentro del documento. Actualmente está haciendo esto, sin embargo, para algunas palabras repetidas no las resalta. ¿Cómo podría modificar el guión para asegurarme de que todas las palabras estén resaltadas?
function highlightSentences() { const doc = DocumentApp.getActiveDocument(); const body = doc.getBody(); sentences.forEach(sentence => { const rangeElement = body.findText(sentence); if (rangeElement) { const startOffset = rangeElement.getStartOffset(); const endOffset = rangeElement.getEndOffsetInclusive(); const element = rangeElement.getElement(); if (element.editAsText) { const textElement = element.editAsText(); textElement.setBackgroundColor(startOffset, endOffset, "#fcfc03"); } } }); }```Usando este script de muestra y la expresión regular, ¿qué tal la siguiente modificación?
function highlightSentences() { var sentences = ["value1", "value2",,,]; // Please set your search texts. const doc = DocumentApp.getActiveDocument(); const body = doc.getBody(); const searchValue = sentences.join("|"); var rangeElement = body.findText(searchValue); while (rangeElement) { const startOffset = rangeElement.getStartOffset(); const endOffset = rangeElement.getEndOffsetInclusive(); const element = rangeElement.getElement(); const textElement = element.editAsText(); textElement.setBackgroundColor(startOffset, endOffset, "#fcfc03"); rangeElement = body.findText(searchValue, rangeElement); } }Desafortunadamente, el método findText solo devuelve un elemento, como se indica en la documentación que se puede leer aquí . Sin embargo, todas las oraciones aún se pueden encontrar fácilmente usando un ciclo while, donde seguimos buscando la oración deseada hasta que la función findText no encuentre más. Podrías adaptar tu código para algo como:
function highlightSentences() { const doc = DocumentApp.getActiveDocument(); const body = doc.getBody(); var sentences = ["search", "these"]; //An array of things to highlight for (var sentence of sentences){ var rangeElement = body.findText(sentence); while (rangeElement != null) { var foundText = rangeElement.getElement().asText(); var startOffset = rangeElement.getStartOffset(); var endOffset = rangeElement.getEndOffsetInclusive(); foundText.setBackgroundColor(startOffset, endOffset, "#fcfc03"); rangeElement = body.findText(sentence, rangeElement); } } }