setAttributes不应用前景色,但保留粗体和其他格式

时间:2016-04-30 04:56:15

标签: google-apps-script google-docs google-docs-api

我希望在运行代码后用“Some text”替换“allowance”这个单词,它会删除单词容差并应用“some text”具有与“allowance”相同格式的“Some text”但前景色属性不会得到设置为原始的。我想要一些文本也是红色,如屏幕截图所示

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);      
    }
  }
}
在偏移

设置属性之前

enter image description here

设置属性后,结果是

enter image description here

3 个答案:

答案 0 :(得分:1)

  

getForegroundColor(offset)

     

以指定的字符偏移量检索前景色。

  

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