添加行并保持格式 - Google 张

Adding rows and keeping formatting - Google Sheets

我需要编写一个脚本,在 table 中添加行并保留上面行的现有格式。我有两个独立的函数可以做同样的事情,添加一行并保留上面一行的现有格式。 table 相同,只是电子表格中的位置不同。

出于某种原因,第二个 table 当我 运行 脚本时,它在第 37 行中应在的位置下方添加第 5 行单元格。我指定在单元格 33 中开始第二行,但出于某种原因,当我添加第二行时,它正在添加它。有人知道我可能做错了什么吗?

非常感谢任何帮助

更新代码

    // global 
var ss = SpreadsheetApp.getActive();

function onOpen() {
  var menu = [{name:"Add New Last Row", functionName:"addRow"}];
  ss.addMenu("Extra", menu);
}

function addRow() {
  var s, data, rw;
  s=SpreadsheetApp.getActiveSheet();
  data=s.getDataRange().getValues();
  for (rw in data) {
    if (data[rw][6]=="Condition Description :") break;
  }
  s.insertRowBefore(Number(rw));
  s.getRange(Number(rw), 4, 1, 2).merge();
  s.getRange(Number(rw), 8).setFormula("=f"+Number(rw)+"*g"+Number(rw));
}

function addFirstRow() {
    var firstRow= 15;
    var sh = ss.getActiveSheet();
    var lCol = sh.getLastColumn();
    var range = sh.getRange(firstRow, 1, 1, lCol);
    var formulas = range.getFormulas();
    sh.insertRowsAfter(firstRow, 1);
    sh.getRange(firstRow+1, 4, 1,2).mergeAcross();
    sh.getRange(firstRow+1, 7, 1,2).mergeAcross();
    newRange = sh.getRange(firstRow, 1, 1, lCol);
    newRange.setFormulas(formulas);
    sh.getRange(firstRow+1, 4, 1,2).mergeAcross();
    sh.getRange(firstRow+1, 7, 1,2).mergeAcross();
}


function addSecondRow() {

    var firstRow= 33;
    var sh = ss.getActiveSheet();
    var lCol = sh.getLastColumn();
    var range = sh.getRange(firstRow, 1, 1, lCol);
    var formulas = range.getFormulas();
    sh.insertRowsAfter(firstRow, 1);
    sh.getRange(firstRow+1, 4, 1,2).mergeAcross();
    sh.getRange(firstRow+1, 7, 1,2).mergeAcross();
    newRange = sh.getRange(firstRow, 1, 1, lCol);
    newRange.setFormulas(formulas);
        sh.getRange(firstRow+1, 4, 1,2).mergeAcross();
    sh.getRange(firstRow+1, 7, 1,2).mergeAcross();

}

您的函数应如下所示:

function addSecondRow() {

    var firstRow= 33;
    var sh = ss.getActiveSheet();
    var lCol = sh.getLastColumn();
    var range = sh.getRange(firstRow, 1, 1, lCol);
    var formulas = range.getFormulas();
    sh.insertRowsAfter(firstRow, 1);
    sh.getRange(firstRow+1, 4, 1,2).mergeAcross();
    sh.getRange(firstRow+1, 7, 1,2).mergeAcross();
    newRange = sh.getRange(firstRow+1, 1, 1, lCol);  
    newRange.setFormulas(formulas);

}

正如我在评论中提到的,这是一个不正确的语法

newRange = sh.getRange(firstRow, 1, 1, lCol);

因为它将 select 您刚插入的那一行的上方。 select 您刚刚添加的行的正确方法是:

newRange = sh.getRange(firstRow+1, 1, 1, lCol);