2016-04-30 16 views
0

Ich möchte ein Wort "Genehmigung" durch "Einige Text" ersetzen, nach dem Ausführen des Codes, wird es Wort zulassen und gelten "Einige Text" mit dem gleichen Formatierung wie die „allowance“ aber Vordergrundfarbe Eigenschaft ist nicht so, dass der original.I auch in der roten Farbe immer gesetzt Etwas Text will, wie im ScreenshotsetAttributes gilt nicht Vordergrundfarbe, aber fett und andere Formatierung wird beibehalten

enter image description here

enter image description here

function retainFormatting() { 
    var doc = DocumentApp.getActiveDocument(); 
    var textToHighlight = 'allowance'; 
    var highlightStyle; 
    var paras = doc.getParagraphs(); 
    var textLocation = {}; 
    var i; 

    for (i=0; i<paras.length; ++i) { 
    textLocation = paras[i].findText(textToHighlight); 
    if (textLocation != null && textLocation.getStartOffset() != -1) { 
     highlightStyle = textLocation.getElement().getAttributes(textLocation.getStartOffset()); 
     textLocation.getElement().deleteText(textLocation.getStartOffset(),textLocation.getEndOffsetInclusive()); 
     textLocation.getElement().insertText(textLocation.getStartOffset(),"Some text");  
     textLocation.getElement().setAttributes(textLocation.getStartOffset(),textLocation.getEndOffsetInclusive(), highlightStyle);  
    } 
    } 
} 
gezeigt

, bevor es erweist sich als

enter image description here

Antwort

0

Versuchen

textLocation.getElement().editAsText().deleteText(textLocation.getStartOffset(),textLocation.getEndOffsetInclusive()); 
textLocation.getElement().editAsText().insertText(textLocation.getStartOffset(),"Some text"); 

Die .editAsText() versetzt Sie in die Bearbeitung der Inhalte des Attributs bei Offset

enter image description here

Einstellung nach Attribut Einstellung Reicher Text, der die vorhandenen Attribute als Wrapper enthält

Alternativ versuchen, den Text anstatt Löschen ersetzt und

paras[i].replaceText("allowance", "some text") // the first attribute is a regular expression as string 
+0

Hallo Jonathon, aber ** editAsText ** hinzufügen funktioniert nicht, Hilfe! – user3436029

+0

Immer noch der gleiche Fehler – user3436029

+0

Versuchen Sie, anstelle des Löschens und Einfügens zu ersetzen. Antwort bearbeitet. – Jonathon

1

getForegroundColor(offset)

Ruft die Vordergrundfarbe an den angegebenen Zeichen Offset eingefügt wird.

Und

setForegroundColor(startOffset, endOffsetInclusive, color)

Setzt die Vordergrundfarbe für den angegebenen Zeichenbereich. Hier

ist ein Beispielcode:

Farbe von Text Erste

highlightColor = textLocation.getElement().getForegroundColor(textLocation.getStartOffset()); 

Anwenden von Farben auf Text

textLocation.getElement().setForegroundColor(textLocation.getStartOffset(),textLocation.getEndOffsetInclusive(), highlightStyle); 

Ich hoffe, es hilft. Goodluck :)

+0

Funktioniert dies wo setAttributes nicht? – Jonathon

+0

@ Jonathon: Ja, SetForegroundColor funktioniert, wo SetAttributes nicht funktioniert. Ich schaue mir das gleiche Problem an. –

0

Ich habe gerade dies getestet und es scheint, dass die Einstellung LINK_URL neben anderen Attributen mit FOREGROUND_COLOR interferiert.

die folgenden Ergebnisse in einem schwarzen Textfarbe:

 var attrs = { 
     "FOREGROUND_COLOR": "#ff0000", // should be red 
     "LINK_URL": null 
     }; 
     text.setAttributes(start, end, attrs); 

Die folgenden Ergebnisse in einem roten Textfarbe:

 var attrs = { 
     "FOREGROUND_COLOR": "#ff0000" // should be red 
     }; 
     text.setAttributes(start, end, attrs); 

In der Tat, wenn Sie nicht brauchen, die Verbindung zu setzen, Entfernen Sie die LINK_URL aus der Liste der Formatierungsoptionen.