Próbuję wyróżnić określone słowa w moim dokumencie Google. Wiem, że mogę zastąpić tekst za pomocą document.replace, ale zastępuje on tylko ciąg, a nie formatowanie. Czy istnieje sposób na zastąpienie ciągu za pomocą kolorowego ciągu za pomocą Google Apps Script?Czy mogę pokolorować określone słowa w dokumencie Google za pomocą Google Apps Script?
Odpowiedz
Jest to lepsze rozwiązanie:
function highlightTextTwo() {
var doc = DocumentApp.openById('<your document id');
var textToHighlight = 'dusty death';
var highlightStyle = {};
highlightStyle[DocumentApp.Attribute.FOREGROUND_COLOR] = '#FF0000';
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) {
textLocation.getElement().setAttributes(textLocation.getStartOffset(),textLocation.getEndOffsetInclusive(), highlightStyle);
}
}
}
Poprzedni Odpowiedź:
Kluczem do sukcesu jest bycie w stanie odwołać się tylko te słowa, które chcesz pokolorować.
Moje rozwiązanie jest:
Get tekst akapitu, który zawiera słowa, które chcesz kolor, usunąć oryginalny akapit, następnie dodać każdy fragment tekstu z powrotem. Jak można dodać każdą część z powrotem appendText zwraca odwołanie do tylko tekst dodał, wtedy można określić jego kolor z setForegroundColor():
function highlightText() {
var doc = DocumentApp.openById('<your document id>');
var textToHighlight = 'dusty death';
var textLength = textToHighlight.length;
var paras = doc.getParagraphs();
var paraText = '';
var start;
for (var i=0; i<paras.length; ++i) {
paraText = paras[i].getText();
start = paraText.indexOf(textToHighlight);
if (start >= 0) {
var preText = paraText.substr(0, start);
var text = paraText.substr(start, textLength);
var postText = paraText.substr(start + textLength, paraText.length);
doc.removeChild(paras[i]);
var newPara = doc.insertParagraph(i, preText);
newPara.appendText(text).setForegroundColor('#FF0000');
newPara.appendText(postText).setForegroundColor('#000000');
}
}
}
myślę, że to możliwe dzięki metodzie setBackgroundColor klasy tekstów w DocumentApp: https://developers.google.com/apps-script/class_text#setBackgroundColor
Musisz odzyskać swoje słowa jako elementy tekstu. W tym celu możesz użyć metody szukania dokumentu obiektu, a następnie powtórzyć wyniki wyszukiwania i użyć getElement. Na koniec, aby przekształcić obiekt Element w obiekt tekstowy, można użyć asText()
.
Mam nadzieję, że to zadziała! ;)
Wraz z wprowadzeniem skryptów dokument związany, to teraz możliwe, aby funkcja podświetlania tekstu, która jest wywoływana z niestandardowego menu.
Z pewnością THIS jest teraz najlepszą odpowiedzią! 8 ^)
Ten skrypt został zmodyfikowany z tego w this answer i może zostać wywołany z interfejsu użytkownika (bez parametrów) lub skryptu.
Masz findText() do pracy z RegEx? –
Tak, findText() działa z RegEx dla 'searchpattern'. W odpowiedzi dostajemy ciąg znaków od użytkownika, więc musisz wygenerować z tego RegEx; zobacz [tę odpowiedź] (http://stackoverflow.com/questions/4371565). – Mogsdad
Dobra odpowiedź ... ale czy nie jest to kwestia koloru "ForeGround"? ;) nie wygląda jednak trudniej ekstrapolować. –
Jest dostępny jako dodatek do Dokumentów Google o nazwie Podświetlenie tekstu z wieloma instancjami. Wskazówki: Początkowo nie działało, ale zamknąłem dokument i ponownie go otworzyłem, a następnie zadziałało. Wtedy to nie działało od czasu do czasu, ale odkryłem, że znaki specjalne w twoim ciągu tekstowym mogą je złamać; Myślę, że miałem ciąg + w moim łańcuchu i po prostu nic nie zrobił. Ale bez specjalnych znaków, działa świetnie. Naprawdę mi pomogłem.
Czy tekst wielu wystąpień może być używany w Skryptach Google Apps? Pytanie dotyczyło automatycznego kolorowania i nie mogłem znaleźć interfejsu programisty dla tego dodatku. –
Dziękuję. Tego właśnie szukałem. Jak radzisz sobie ze słowem występującym więcej niż raz w akapicie? – user1613077
Ta sama zasada dotyczy. Rozsuwasz paragraf i składasz go ponownie. Po ponownym złożeniu, używasz setForegroudColor na każdym słowie. – Weehooey