删除一段文字

时间:2015-06-01 16:24:41

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

我构建了一个应用脚本来复制文档,并根据我在Google电子表格中输入的数据对其进行编辑。

复制和编辑文档后,我想删除某些文本段落。

我正在使用以下内容来查看是否可以找到该位置 我正在搜索的文字,但我的代码返回Range Element.

var body = DocumentApp.openById(copyID).getBody();
var para = body.findText('X1');

Logger.log(para);

我理想的状态是在文档中提供两个位置的应用程序脚本,然后让Apps脚本删除该范围内的所有文本。

如何生成正确的偏移并删除文本?

2 个答案:

答案 0 :(得分:3)

  

我使用以下内容查看是否可以找到我正在搜索的文本的位置,但我的代码返回了Range Element。

应该发生这种情况,这里是关于范围元素的文档中的一些信息。

  

Class RangeElement
  元素周围的包装器,具有可能的开始和结束偏移量。这些偏移允许在搜索结果,文档选择和命名范围中表示Text元素中的一系列字符    https://developers.google.com/apps-script/reference/document/range-element

  

我的理想状态是为应用程序脚本提供文档中的两个位置,然后让Apps脚本删除这些范围内的所有文本。

使用以下内容检索偏移并删除文本。

var startOffset = rangeElement.getStartOffset();
var endOffset = rangeElement.getEndOffsetInclusive();
rangeElement.getElement().asText().deleteText(startOffset,endOffset);
  

<强> getStartOffset()
  获取范围元素中部分范围的开始位置。如果元素是Text元素并且isPartial()返回true,则offset是范围开始之前的字符数(即范围中第一个字符的索引);在任何其他情况下,此方法返回-1   <子> https://developers.google.com/apps-script/reference/document/range-element#getStartOffset()

  

<强> getEndOffsetInclusive()
  获取范围元素中部分范围结束的位置。如果元素是Text元素并且isPartial()返回true,则offset是范围中最后一个字符之前的字符数(即范围中最后一个字符的索引);在任何其他情况下,此方法返回-1    https://developers.google.com/apps-script/reference/document/range-element#getEndOffsetInclusive()

  

deleteText(startOffset,endOffsetInclusive)
  删除一系列文字    https://developers.google.com/apps-script/reference/document/text#deleteText(Integer,Integer)

  

如何生成正确的偏移并删除文本?

以下脚本会这样做。

var rangeElement = DocumentApp.openById(copyID).getBody().findText('X1');
if (rangeElement.isPartial()) {
     var startOffset = rangeElement.getStartOffset();
     var endOffset = rangeElement.getEndOffsetInclusive();
     rangeElement.getElement().asText().deleteText(startOffset,endOffset);
} else {
     rangeElement.getElement().removeFromParent();
}

答案 1 :(得分:0)

我一直试图解决这个问题,并找到了以下代码片段:

var start = '{testingstart}'; // Starting text
var end = '{testingend}'; // Ending text
var startPara = findThisText(body, start); // Find element that has start text
var endPara = findThisText(body, end);  // Find element that has end text
var stIndex = body.getChildIndex(startPara); // Find index number of the starting child element
var edIndex = body.getChildIndex(endPara);  // Find the index number of the ending child element

var loop = edIndex - stIndex;
for(var i = 0; i < loop; i++){
  // Keep removing the child element with index = stIndex until the loop ends.
  var removing = body.getChild(stIndex);
  body.removeChild(removing);
}

我还使用以下辅助函数来查找给定文本所需的元素:

// Helper function to locate field based on search text
function findThisText(body, text) {
    var found = body.findText(text);
    if(found) {
      return found.getElement().getParent();
    } else {
      return null;
    }
}

它的优点在于它删除了开始和结束目标之间的任何ElementType。如果我在段落之间也有表格,它对我有用。 参考:https://developers.google.com/apps-script/reference/document/body