在 Google 文档中的命名范围后添加段落也会将其添加到该范围

Adding a paragraph after a named range in a Google Document also adds it to that range

我需要在文档中创建多个范围。在每个范围内都有一个段落,但每次我在新范围内创建一个新段落时,该段落也在上述范围内找到

function onOpen(e){
  DocumentApp.getUi()
    .createAddonMenu()
    .addItem('Star', 'yoyo')
    .addToUi();
}

function onInstall(e) {
  onOpen(e);
}

function onInstall(e) {
  onOpen(e);
}
function ver(){
  var doc = DocumentApp.getActiveDocument();
  var ranges=doc.getNamedRanges();
  Logger.log('%s ',ranges.length);
  for(var index=0 ; index<ranges.length; index++){
    for(var t=0; t<ranges[index].getRange().getRangeElements().length;t++){
     Logger.log('%s y es de %s',ranges[index].getName(), index);
    }
  }
}

function yoyo(){
  var doc=DocumentApp.getActiveDocument();
  var body=doc.getBody();
  var rangeBuilde = doc.newRange();
  var name = body.appendParagraph('yasmany');
  var apellido = body.appendParagraph('gonzalez');
  var madre = body.appendParagraph('matilde');
  rangeBuilde.addElement(name);
  rangeBuilde.addElement(apellido);
  rangeBuilde.addElement(madre);
  var re = rangeBuilde.build();
  doc.addNamedRange('ymy2', re);
  ver();
}

Logger.log()包含(在运行 yoyo 2次之后)

[16-03-10 16:01:49:888 PST] 2.0 
[16-03-10 16:01:49:892 PST] ymy2 y es de 0.0
[16-03-10 16:01:49:895 PST] ymy2 y es de 0.0
[16-03-10 16:01:49:898 PST] ymy2 y es de 0.0
[16-03-10 16:01:49:901 PST] ymy2 y es de 0.0
[16-03-10 16:01:49:904 PST] ymy2 y es de 0.0
[16-03-10 16:01:49:907 PST] ymy2 y es de 0.0
[16-03-10 16:01:49:913 PST] ymy2 y es de 1.0
[16-03-10 16:01:49:915 PST] ymy2 y es de 1.0
[16-03-10 16:01:49:917 PST] ymy2 y es de 1.0

但我想要这个

[16-03-10 16:01:49:888 PST] 2.0 
[16-03-10 16:01:49:892 PST] ymy2 y es de 0.0
[16-03-10 16:01:49:895 PST] ymy2 y es de 0.0
[16-03-10 16:01:49:898 PST] ymy2 y es de 0.0
[16-03-10 16:01:49:913 PST] ymy2 y es de 1.0
[16-03-10 16:01:49:915 PST] ymy2 y es de 1.0
[16-03-10 16:01:49:917 PST] ymy2 y es de 1.0

这是一个 Apps 脚本错误:在命名范围包含在该范围之后立即添加的段落,尽管 documentation 明确指出命名范围应该是不可变的。

要解决此问题,请始终在文档末尾保留一个空段落。以下函数是 appendParagraph 方法的替代方法,它确保末尾始终有一个空白段落:

function appendPara(body, text) {
  var newPara = body.appendParagraph(text);
  body.appendParagraph('');
  var previous = newPara.getPreviousSibling();
  if (previous.asText().getText().length === 0) {
    previous.removeFromParent();
  }
  return newPara;
} 

使用此函数代替 appendParagraph 解决了问题:

function yoyo() {
  var doc = DocumentApp.getActiveDocument();
  var body = doc.getBody();
  var rangeBuilde = doc.newRange();
  var name = appendPara(body, 'yasmany');
  var apellido = appendPara(body, 'gonzalez');
  var madre = appendPara(body, 'matilde');
  rangeBuilde.addElement(name);
  rangeBuilde.addElement(apellido);
  rangeBuilde.addElement(madre);
  var re = rangeBuilde.build();
  doc.addNamedRange('ymy2', re);
  ver();
}

溜溜球运行两次后的输出是

[16-03-11 19:42:47:730 PST] 2.0 
[16-03-11 19:42:47:733 PST] ymy2 y es de 0.0
[16-03-11 19:42:47:734 PST] ymy2 y es de 0.0
[16-03-11 19:42:47:736 PST] ymy2 y es de 0.0
[16-03-11 19:42:47:739 PST] ymy2 y es de 1.0
[16-03-11 19:42:47:740 PST] ymy2 y es de 1.0
[16-03-11 19:42:47:742 PST] ymy2 y es de 1.0