1

我正在尝试遍历文档中的每个元素,获取每个段落的开始/结束位置。但它保持返回-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();
4

1 回答 1

0

根据官方文档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()
}
于 2018-08-29T14:52:57.433 回答