javascript - 添加行并保持格式 - Google 表格

标签 javascript google-apps-script google-sheets google-sheets-api

我需要编写一个脚本,该脚本将在表中添加行并保留上面行的现有格式。我有两个单独的函数可以执行相同的操作,即添加一行并保留上面行的现有格式。这些表格是相同的,只是电子表格上的位置不同。

由于某种原因,当我运行脚本时,第二个表在第 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);

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

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

关于javascript - 添加行并保持格式 - Google 表格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43807767/

相关文章:

google-apps-script - 提供 API key 以避免 Apps 脚本中的 map 服务出现命中限制错误

javascript - 如何在 JavaScript 中等待函数的 promise

ASP.NET 调用另一个元素的 DoPostBack 函数

javascript - 如何在谷歌应用程序脚本中编写 if/and 语句

google-apps-script - 在脚本中使用电子表格标准函数?

gwt - Google Apps 脚本 - 在仅以 View 形式共享电子表格时发出运行脚本问题

json - Twitter JSON 到 Google Spreadsheet API - 1. 导入和读取 JSON 文件

javascript - Xamarin 表单 webview Eval 不调用 javascript

javascript - 遍历我的sql结果并循环显示

google-apps-script - Google App Script 自定义函数中的错误