我希望在运行代码后用“Some text”替换“allowance”这个单词,它会删除单词容差并应用“some text”具有与“allowance”相同格式的“Some text”但前景色属性不会得到设置为原始的。我想要一些文本也是红色,如屏幕截图所示
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);
}
}
}
在偏移设置属性之前
设置属性后,结果是
答案 0 :(得分:1)
以指定的字符偏移量检索前景色。
和
setForegroundColor(startOffset, endOffsetInclusive, color)
设置指定字符范围的前景色。
以下是示例代码:
从文字中获取颜色
highlightColor = textLocation.getElement().getForegroundColor(textLocation.getStartOffset());
将颜色应用于文字
textLocation.getElement().setForegroundColor(textLocation.getStartOffset(),textLocation.getEndOffsetInclusive(), highlightStyle);
我希望它有所帮助。古德勒克:)
答案 1 :(得分:0)
尝试
textLocation.getElement().editAsText().deleteText(textLocation.getStartOffset(),textLocation.getEndOffsetInclusive());
textLocation.getElement().editAsText().insertText(textLocation.getStartOffset(),"Some text");
.editAsText()
让您编辑富文本的内容,将现有属性保留为“包装器”
或者,尝试替换文本而不是删除和插入
paras[i].replaceText("allowance", "some text") // the first attribute is a regular expression as string
答案 2 :(得分:0)
我刚刚对此进行了测试,似乎将LINK_URL
与其他属性一起设置会干扰FOREGROUND_COLOR
。
以下结果为黑色文字颜色:
var attrs = {
"FOREGROUND_COLOR": "#ff0000", // should be red
"LINK_URL": null
};
text.setAttributes(start, end, attrs);
以下结果为红色文字颜色:
var attrs = {
"FOREGROUND_COLOR": "#ff0000" // should be red
};
text.setAttributes(start, end, attrs);
实际上,如果您不需要设置链接,请从格式选项列表中删除LINK_URL
。