Googleドキュメントで特定の単語を強調表示しようとしています。document.replaceを使用してテキストを置き換えることができることは知っていますが、文字列自体のみを置き換え、フォーマットは置き換えません。Google Apps Scriptを使用して文字列を色付きの文字列に置き換える方法はありますか?
4 に答える
ドキュメントにバインドされたスクリプトの導入により、カスタムメニューから呼び出されるテキスト強調表示機能を作成できるようになりました。
確かにこれが今のベストアンサーです!8 ^)
このスクリプトは、この回答のスクリプトから変更されており、UI(パラメーターなし)またはスクリプトから呼び出すことができます。
/**
* Find all matches of target text in current document, and highlight them.
*
* @param {String} target (Optional) The text or regex to search for.
* See Body.findText() for details.
* @param {String} background (Optional) The desired highlight color.
* A default orange is provided.
*/
function highlightText(target,background) {
// If no search parameter was provided, ask for one
if (arguments.length == 0) {
var ui = DocumentApp.getUi();
var result = ui.prompt('Text Highlighter',
'Enter text to highlight:', ui.ButtonSet.OK_CANCEL);
// Exit if user hit Cancel.
if (result.getSelectedButton() !== ui.Button.OK) return;
// else
target = result.getResponseText();
}
var background = background || '#F3E2A9'; // default color is light orangish.
var doc = DocumentApp.getActiveDocument();
var bodyElement = DocumentApp.getActiveDocument().getBody();
var searchResult = bodyElement.findText(target);
while (searchResult !== null) {
var thisElement = searchResult.getElement();
var thisElementText = thisElement.asText();
//Logger.log(url);
thisElementText.setBackgroundColor(searchResult.getStartOffset(), searchResult.getEndOffsetInclusive(),background);
// search for next match
searchResult = bodyElement.findText(target, searchResult);
}
}
/**
* Create custom menu when document is opened.
*/
function onOpen() {
DocumentApp.getUi().createMenu('Custom')
.addItem('Text Highlighter', 'highlightText')
.addToUi();
}
これはより良い解決策です:
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);
}
}
}
前の回答:
重要なのは、色付けしたい単語だけを参照できるようにすることです。
私の解決策は次のとおりです。
色を付けたい単語を含む段落のテキストを取得し、元の段落を削除してから、テキストの各部分を追加し直します。各部分を追加し直すと、appendTextは追加されたテキストのみへの参照を返します。次に、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');
}
}
}
DocumentAppのTextクラスのメソッドsetBackgroundColorで可能だと思います:https ://developers.google.com/apps-script/class_text#setBackgroundColor
単語をテキスト要素として取得する必要があります。これを行うには、オブジェクトDocumentのfindメソッドを使用してから、検索結果を反復処理してgetElementを使用します。最後に、ElementオブジェクトをTextオブジェクトに変換するには、を使用できますasText()
。
それがうまくいくことを願っています!;)
これは、Multi-instanceTextHighlightingという名前のGoogleドキュメントアドオンとして利用できます。ヒント:最初は機能していないようでしたが、ドキュメントを閉じて再度開いたところ、機能しました。その後、時々機能しないように見えましたが、テキスト文字列内の特殊文字がそれを壊す可能性があることがわかりました。文字列に+が含まれていると思いますが、何も実行されませんでした。しかし、特殊文字がなければ、それはうまく機能します。本当に助けてくれました。