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

时间:2016-03-11 00:17:33

标签: google-apps-script google-docs

我需要在doc中创建多个范围。在每个范围内都有一个段落,但每次我在新范围内创建一个新段落时,此段落也会在上面的范围内找到

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

1 个答案:

答案 0 :(得分: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();
}

两次运行yoyo后的输出是

[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