删除文档中第二横线以下的所有内容
Deleting all content down from the second horizontal line in a document
我正在尝试创建一个脚本来从页面向下删除所有 text/content。您可以在下面看到当前文档。
目前,我设置了脚本,可以删除所有内容,包括 "STARTHERE" 的文本。但是,我希望它从图像中的第二条水平线向下删除,但是不包括该线。
- 关于如何从第二条水平线向下删除有什么想法吗?
- 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 元素,寻找那些包含 HorizontalRule 元素的元素(使用 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++;
}
}
}
我正在尝试创建一个脚本来从页面向下删除所有 text/content。您可以在下面看到当前文档。
目前,我设置了脚本,可以删除所有内容,包括 "STARTHERE" 的文本。但是,我希望它从图像中的第二条水平线向下删除,但是不包括该线。
- 关于如何从第二条水平线向下删除有什么想法吗?
- 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 元素,寻找那些包含 HorizontalRule 元素的元素(使用 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++;
}
}
}