订购谷歌文档书签按文档中的绝对位置

时间:2015-09-22 17:16:46

标签: google-apps-script google-docs

我没有找到一种方法来获取书签列表,这些书签按文档中的绝对位置排序。

var doc = DocumentApp.getActiveDocument();
var bookmarksList = doc.getBookmarks();

bookmarksList未按职位排序。

为了做到这一点,我想我可以写点什么:

var bookmarksList = doc.getBookmarks().sort(sortBookmarkByPosition);

所以使用自定义排序功能

function sortBookmarkByPosition(a,b){
  return what_to_return_here;
}

问题是Position.getOffset()"获取此位置在包含它的元素中的相对位置。"

是否存在通过文档中的绝对位置获取书签顺序的解决方案?

1 个答案:

答案 0 :(得分:0)

我找到了一个可能的解决方案。 它对性能不太好,但似乎有效。

对文档中书签绝对位置的书签进行排序应与文档开头与位置元素之间文档中包含的元素数的排序相同每个书签。

按照我的解决方案:

function sortBookmarkByPosition(a,b){

  var body = DocumentApp.getActiveDocument().getBody();
  bodyElem = body.getChild(0);

  aElem = a.getPosition().getElement();
  bElem = b.getPosition().getElement();

  // a 
  var rangeBuilder = DocumentApp.getActiveDocument().newRange();  
  rangeBuilder.addElementsBetween(bodyElem, aElem); 
  var aCount = rangeBuilder.getRangeElements().length; 

  // b
  rangeBuilder = DocumentApp.getActiveDocument().newRange();
  rangeBuilder.addElementsBetween(bodyElem, bElem);
  var bCount = rangeBuilder.getRangeElements().length;

  return aCount - bCount;
}

如果您发现错误,请发表评论。真正欢迎更好的解决方案: - )。