删除文档中第二横线以下的所有内容

Deleting all content down from the second horizontal line in a document

我正在尝试创建一个脚本来从页面向下删除所有 text/content。您可以在下面看到当前文档。

目前,我设置了脚本,可以删除所有内容,包括 "STARTHERE" 的文本。但是,我希望它从图像中的第二条水平线向下删除,但是不包括该线。

  1. 关于如何从第二条水平线向下删除有什么想法吗?
  2. deleteText startOffset 和 endOffsetInclusive 究竟是什么意思?它像行号还是?

上一个脚本:

function removeText() {
    var body = DocumentApp.getActiveDocument().getBody();
    var rangeElement = body.editAsText();
    var start = "STARTHERE";
    var end = "ENDHERE";
    var rangeElement1 = DocumentApp.getActiveDocument().getBody().findText(start);
    var rangeElement2 = DocumentApp.getActiveDocument().getBody().findText(end);
    if (rangeElement1.isPartial()) {
       var startOffset = rangeElement1.getStartOffset();
       var endOffset = rangeElement2.getEndOffsetInclusive();
       rangeElement1.getElement().asText().deleteText(startOffset,endOffset);
    }
}

你需要彻底改变你的方法,因为findText只能找到文本,而水平线不是文本;它是一种特殊类型的文档元素,HorizontalRule

(既然你问了:startOffset 和 endOffsetInclusive 是元素内的字符数;例如,如果在包含 "A big red dog" 的段落中找到文本 "red",则 startOffset 为 6,endOffset是 9。None 这对这里有帮助)

这是我的方法:遍历 Paragraph 元素,寻找那些包含 Horizo​​ntalRule 元素的元素(使用 findElement 方法)。一旦我们找到两个这样的段落,删除所有后续段落。

Apps 脚本无法删除文档的最后一段,这是一个问题;因此,我提前添加了空段落,而不是删除它。

function removeAfterSecondLine() {
  var body = DocumentApp.getActiveDocument().getBody();
  body.appendParagraph('');
  var para = body.getParagraphs();
  var ruleCount = 0;
  for (var i = 0; i < para.length - 1; i++) {
    if (ruleCount >= 2) {
      body.removeChild(para[i]);
    }
    else if (para[i].findElement(DocumentApp.ElementType.HORIZONTAL_RULE)) {
      ruleCount++;
    }
  }
}