我正在尝试遍历文档中的每个元素,获取每个段落的开始/结束位置。但是它保持返回-1。有什么想法我做错了吗?
var body = doc.getBody();
var elements = body.getNumChildren();
for( var i=0;i<elements;i++) {
var element = body.getChild(i).copy();
var type = element.getType();
if( type == DocumentApp.ElementType.PARAGRAPH ){
var text = element.asParagraph().getText();
var range = element.asParagraph().findElement(DocumentApp.ElementType.PARAGRAPH);
var start = range.getStartOffset();
var finish = range.getEndOffsetInclusive();
答案 0 :(得分:0)
根据official docs,Range
类仅在当前用户在页面上进行选择时才可访问。因此,您可以使脚本正常工作,但是需要一些用户输入,而不是在空白文档上运行。
function getRange() {
var ui = DocumentApp.getUi();
// Get the user selection. Display an alert if there is none.
var selection = DocumentApp.getActiveDocument().getSelection();
if(selection) {
// Get all the elements in the current selection
var elements = selection.getRangeElements();
for( var i=0;i<elements.length;i++) {
var el = elements[i]
// Can it be edited as text? If not, skip it
if(el.getElement().editAsText) {
var start = el.getStartOffset()
var finish = el.getEndOffsetInclusive();
ui.alert("start: " + start + ", finish: " + finish)
} else {
ui.alert("Text not selected!");
}
}
} else {
ui.alert("Nothing is selected!");
}
}
偏移量检查选择内容相对于最后一个元素的位置。如果是文本,则它将返回索引。如果不是(例如分页符或图像),它将返回-1。
添加一个简单的onOpen
事件将使您可以从自定义菜单运行脚本进行测试:
function onOpen() {
var ui = DocumentApp.getUi();
ui.createMenu("Offsets").addItem("Run", "getRange").addToUi()
}