删除文本段落

4
我编写了一个应用程序脚本,根据我输入到 Google 电子表格中的数据,复制文档并编辑它。
一旦文档被复制并编辑,我想删除某些文本段落。
我使用以下代码来查找我要搜索的文本位置,但我的代码返回 Range Element
var body = DocumentApp.openById(copyID).getBody();
var para = body.findText('X1');

Logger.log(para);

我的理想状态是为Apps Script在文档中提供两个位置,并让它删除该范围内的所有文本。

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

2个回答

4
我曾使用以下代码来查找所需文本的位置,但我的代码返回了Range Element。
这是正常现象,下面是有关范围元素的文档信息: RangeElement类 - 包装一个带有可能的起始和结束偏移量的元素。这些偏移量允许在搜索结果、文档选择和命名范围中表示Text元素内的一段字符。 https://developers.google.com/apps-script/reference/document/range-element
我的理想状态是让应用脚本在文档中提供两个位置,然后让应用脚本删除这些范围内的所有文本。
使用以下代码来检索偏移量并删除文本。
var startOffset = rangeElement.getStartOffset();
var endOffset = rangeElement.getEndOffsetInclusive();
rangeElement.getElement().asText().deleteText(startOffset,endOffset);

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

getEndOffsetInclusive()
获取范围元素中部分范围结尾的位置。如果元素是文本元素并且isPartial()返回true,则偏移量是范围内最后一个字符之前的字符数(即范围中最后一个字符的索引);在任何其他情况下,此方法返回-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

我一直在尝试解决这个问题,找到了下面的代码片段可以解决:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接