向命名区域添加一行

3

我在Google表格中有一个命名区域(A1:K14)。我想做的就是在该命名区域底部添加一行新记录。看起来这是一项简单的任务。但是,使用这段代码时,命名区域不会扩展并且我也没有收到错误消息。实际上,它只是在命名区域之外插入了一行新记录,这并不是我想要的结果。如果我改为使用 insertRowBefore (lastRow),操作会插入一行新的空白行并扩展命名区域。因为我正在自学GAS,所以这可能是我自己犯的简单错误。

var sheet = SpreadsheetApp.getActiveSheet()
var Range = sheet.setActiveRange(range);
var data = Range.getValues();
Logger.log(range.getA1Notation());
var lastRow = SpreadsheetApp.getActiveSheet().getRange('DataRange').getNumRows();
SpreadsheetApp.getActive().insertRowAfter(lastRow);
return range;
2个回答

4

添加行和/或列到命名范围

此函数默认设置为添加一行。

//r is number of rows to add
//c is number of columns to add
function addRowAndColumnsToNamedRange(name,r,c) {
  var name=name||'One';//default name
  var r=r||1;//default number of rows to add
  var c=c||0;//default number columns to add
  var ss=SpreadsheetApp.getActive();
  var  nrgA=ss.getNamedRanges();
  for(var i=0;i<nrgA.length;i++) {
    if(nrgA[i].getName()==name) {
      var nr=nrgA[i];
      var h=nr.getRange().getHeight();
      var w=nr.getRange().getWidth();
      var sh=nr.getRange().getSheet();
      var row=nr.getRange().getRow();
      var col=nr.getRange().getColumn();
      var rg=sh.getRange(row,col,h+r,w+c);
      ss.setNamedRange(name,rg);
      break;
    }
  } 
}

Class NamedRange

Class Range


1
感谢您提供的示例和建议。我认为 insertRowBefore 和 InsertRowAfter 让我有些困惑。它们听起来像是用于在数组范围内插入行的。一旦您扩展了数组,重新使用新的维度对其进行重新分配是有意义的。 - Kmh626

2
我认为其中一种方法是显式地获取该NamedRange并扩展它。
类似于以下内容:
  1. 使用getNamedRanges()获取该NamedRange
  2. 使用setRange(range)设置包括新行的NamedRange范围

请注意,我已经保留了HTML标签。

1
你可以使用命名区域的一种方法是使该区域比列表更大,因为它们不会显示空单元格。 - Cooper
非常抱歉 @Cooper,我没听懂你的意思。你指的是哪个列表? - Umair Mohammad
1
我猜现在想一想,我正在提到创建具有命名范围的数据验证的使用。在那里,我倾向于使用比我预计需要的范围更大的范围,以便我可以更改下拉列表中的项目数量,而无需破坏命名范围。 - Cooper

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接