方法findText()卡在Google文档的第一段

时间:2013-10-23 03:18:30

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

我正在尝试在Google文档中找到某些字词,以便通过脚本格式化它们。问题是,似乎findText()只能在第一段中找到该单词。如果它在其他地方,findText()将疯狂并给我(看似)随机位置的单词。以下是它的编码方式:

function findBoldMarks(){
  var doc = DocumentApp.openById('docId');
  var docText = doc.editAsText();

  // search initial bold markup 
  var srcB0 = body.findText('bold0');
  var idB0 = srcB0.getStartOffset();

  // search final bold markup 
  var srcB1 = body.findText('bold1');
  var idB1End = srcB1.getEndOffsetInclusive();

  // set markup and text wrapped within bold markup as bold
  docText.setBold(idB0, idB1End, true);
}

我觉得我必须忽略一些基本的东西,但经过几个小时的努力,我不再确定了。我很感激任何想法。谢谢!

1 个答案:

答案 0 :(得分:0)

要继续搜索第一个匹配项,您需要循环搜索并在findText()中提供第二个“from”参数。

以下是仅搜索1个字的示例的开头......

function findBoldMarks(){
  var body = DocumentApp.getActiveDocument().getBody();
  var pattern = "bold0";
  var searchResult = body.findText(pattern);
  var style = {};

  style[DocumentApp.Attribute.BOLD] = true;

  while (searchResult !== null) {
    var thisElement = searchResult.getElement();
    var thisElementText = thisElement.asText();

    thisElementText.setAttributes(searchResult.getStartOffset(), searchResult.getEndOffsetInclusive(),style);

    // search for next match
    searchResult = body.findText(pattern, searchResult);
  }
}

...源自this post中的一些答案。

也许某些人可以修改以在两个搜索词之间包含文本。 findText()似乎不接受正则表达式搜索模式,因此可能需要采用另一种方法。