在google API脚本中获取findtext的子索引

时间:2013-10-04 13:27:15

标签: google-apps-script

我的目标是用其他文档的内容替换Google云端硬盘文档中的一段文字。

我已经能够将文档插入到另一个文档中的某个位置,但是我无法确定要替换的文本的子索引。以下是我到目前为止的情况:

function replace(docId, requirementsId) {

var body = DocumentApp.openById(docId).getActiveSection();
var searchResult = body.findText("<<requirementsBody>>");
var pos = searchResult.?? // Here I would need to determine the position of the searchResult, to use it in the insertParagraph function below

var otherBody = DocumentApp.openById(requirementsId).getActiveSection();
var totalElements = otherBody.getNumChildren();
for( var j = 0; j < totalElements; ++j ) {
var element = otherBody.getChild(j).copy();
  var type = element.getType();
  if( type == DocumentApp.ElementType.PARAGRAPH ) {
      body.insertParagraph(pos,element);   
  } else if( type == DocumentApp.ElementType.TABLE ) {
    body.insertTable(pos,element);
  } else if( type == DocumentApp.ElementType.LIST_ITEM ) {
    body.insertListItem(pos,element);
  } else {
    throw new Error("According to the doc this type couldn't appear in the body: "+type);
  }
}


};

非常感谢任何协助。

2 个答案:

答案 0 :(得分:5)

findText()

返回RangeElement。

您可以使用

var r = rangeElement.getElement()

获取包含找到文本的元素。

要获得其childIndex,您可以使用

r.getParent().getChildIndex(r)

答案 1 :(得分:2)

感谢布鲁斯的回答,我能够找到解决这个问题的方法,但是如果我从另一个文档插入Elements,我需要实际找到找到的文本的父级索引,如找到的那样text只是Paragraph Element中的Text元素。所以,我需要找到段落元素的索引,然后插入与该段落相关的新元素。

代码如下所示:

  var foundTag = body.findText(searchPattern);
  if (foundTag != null) {
    var tagElement = foundTag.getElement();
    var parent = tagElement.getParent();
    var insertPoint = parent.getParent().getChildIndex(parent);
    var otherBody = DocumentApp.openById(requirementsId).getActiveSection();
    var totalElements = otherBody.getNumChildren();

    for( var j = 0; j < totalElements; ++j ) {
    ... then same insertCode from the question above ...
      insertPoint++;
    }