Google应用脚本定位两个标记之间的文本

时间:2015-03-24 12:08:11

标签: javascript google-apps-script

我正在尝试使用Google应用程序脚本(Google文档脚本 - 我认为它们是javascript的一个版本,如果有帮助)编写一个脚本来做一些相对直接的事情:

我想从标记中搜索:{start}直到标记{end},然后将任何预定义的关键字加粗。然后,一旦完成,我想删除标签{start}和{end}。

对于以下内容:

{start}this, is, some text, in here{end}
this is, some text, in here

我把这段代码写成(mish-mashed),它会搜索段落中的单词,如果找到它们会使它们变粗 - 这是有效的,但是我的主要问题是它也将替换块外的单词(start- >结束)找到时加粗;我不希望脚本影响文档中的其他块或段落。

function emboldenText(docID, textToHighlight) {

  var doc  = DocumentApp.openById(docID);

  var paras = doc.getParagraphs();
  var textLocation = {};
  var i;
  var startLocation;

  for (i=0; i<paras.length; ++i) {    


    textLocation = paras[i].findText(textToHighlight);
    if (textLocation != null && textLocation.getStartOffset() != -1) {

      Logger.log("hit, making text bold at: "+ textLocation.getStartOffset());

      /* Make it bold! */
      textLocation.getElement().setBold(textLocation.getStartOffset(),textLocation.getEndOffsetInclusive(), true);

    }
  }
}

我只是为每个单词调用该函数我喜欢突出显示(大胆): 即:

emboldenText(fileId,'Mustard');
    emboldenText(fileId,'Egg');
    emboldenText(fileId,'Wheat');

我对从何处开始的想法是:在文档中搜索单词{start},然后搜索一下如何抓住它的元素位置,同时抓住结束位置,然后只用粗体替换单词。 #39;在该部分 - 如何实际实现这一目标正在躲避我。

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

这应该这样做:

function BoldBetweenTags() {
  var startTag = '{start}';
  var endTag = '{end}'
  var body = DocumentApp.getActiveDocument().getBody();
  var para = body.getParagraphs();
  for(var i in para){  
    var from = para[i].findText(startTag);
    var to =  para[i].findText(endTag,from);
    if((to != null && from != null) && ((to.getStartOffset()-1) - (from.getStartOffset()+startTag.length) > 0) ){
      para[i].editAsText().setBold(from.getStartOffset()+startTag.length, to.getStartOffset()-1, true);
    }
  }
}