删除Google Apps脚本中整个范围的内容

时间:2016-06-02 23:13:21

标签: google-apps-script google-docs

我正在尝试使用以下代码删除文档中Range的所有内容。它能够从范围中获取RangeElements,但是在此操作之后它显然使文档处于奇怪的状态,使得我的应用程序中的其他代码无法使用。

代码取决于此Range所属的文档稍后会引发错误。我不确定这是否是由于此代码的具体原因,或者我是否需要采取其他措施将文档置于不同的可编辑状态。

/**
 * Deletes the range and all of its RangeElements.
 */
function removeRange (range) {
  Logger.log('removeRange called with range:' + range)

  var rangeElements = range.getRangeElements()

  Logger.log('removing ' + rangeElements.length + ' rangeElements')
  for (var i = 0; i < rangeElements.length; i++) {
    var rangeElement = rangeElements[i]

    // http://stackoverflow.com/a/30604543/5465037
    if (rangeElement.isPartial()) {
      // It's partial!
      Logger.log('it\'s partial!')
      var startOffset = rangeElement.getStartOffset()
      var endOffset = rangeElement.getEndOffsetInclusive()
      rangeElement.getElement().asText().deleteText(startOffset, endOffset)
    } else {
      rangeElement.getElement().removeFromParent()
    }
  }

  Logger.log('removeRange finished.')
}

修改:我正在调用以下代码,根据我自己在Google文档中的占位符获取范围。占位符的格式为{tagIdHere}{/tagIdHere}。此代码确实用' '替换了标记,但我无法正确删除此函数返回的Range。

/**
 * Gets a range between the two tags, removing the tags.
 */
function getRangeBetweenAndRemoveTags (doc, tagId) {
  var rangeBuilder = doc.newRange()

  var startTag = '{' + tagId + '}'
  var endTag = '{/' + tagId + '}'

  var body = doc.getBody()
  var startElement = body.replaceText(startTag, ' ')
  var endElement = body.replaceText(endTag, ' ')

  Logger.log('startElement: ' + startElement)
  Logger.log('endElement: ' + endElement)

  rangeBuilder.addElementsBetween(startElement, endElement)

  var range = rangeBuilder.build()

  return range
}

0 个答案:

没有答案