【问题标题】:google sheet add button to insert new row that has formula谷歌表添加按钮以插入具有公式的新行
【发布时间】:2021-09-02 16:02:26
【问题描述】:

这是我的数据的简化版本。我想在灰色区域的底部放置一个按钮,以便在单击时在底部上方插入一个新行。新行必须有公式作为它之前的行。

我的真实公式非常复杂,所以我不能使用 arrayFormula 来完成新行中的数据。 this a link to my spreadsheet.

【问题讨论】:

  • 请注意,如果您插入一行,下面的公式可能会出错,例如工作表的 B 列。
  • @MikeSteelson 您可以将您的建议作为答案或在表格中发送吗?
  • 好的,完成了......现在,我会非常好奇地通过arrayformula找到一个解决方案,即使是在一个复杂的解决方案中

标签: google-sheets


【解决方案1】:

您可以参考此示例代码,该示例代码使用自定义菜单根据前一行插入带有公式的新行。

代码:

function onOpen() {
  var ui = SpreadsheetApp.getUi();
  // Or DocumentApp or FormApp.
  ui.createMenu('Custom Menu')
      .addItem('Insert New Row', 'insertRow')
      .addToUi();
}

function insertRow() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var lastRow = sheet.getLastRow();
  var lastCol = sheet.getLastColumn();

  //Exit function if current active sheet is not Sheet1
  if(sheet.getName() != "Sheet1"){
    return;
  }

  //insert new row
  sheet.insertRowAfter(lastRow);
  sheet.getRange(lastRow,2,1,3).copyTo(sheet.getRange(lastRow+1,2));
}

它有什么作用?

  1. 使用getLastRow()getLastColumn() 获取活动工作表中包含内容的最后一行和最后一列
  2. 使用insertRowAfter(afterPosition) 在包含内容的最后一行之后插入新行
  3. 使用getRange(row, column, numRows, numColumns)获取包含内容的最后一行的范围

地点:

row = 你最后一行有内容

column = 您要开始的列索引(在样本表中它位于 B 列/索引 2)

numRows = 应该是 1(我们只想复制当前有内容的最后一行)

numCols = 要选择的列数。在样本表中有 3 列(B-D 列)

  1. 使用copyTo(destination) 复制第3 步中所选范围的值和格式,并将其粘贴到新添加的行中。目标范围应该是左上角的单元格。因为我们想把它复制到新行。我用getRange(last row +1, 2)

输出:

注意:

  • 如果您想使用位于灰色行下方的按钮,只需在您的按钮中分配脚本时使用insertRow

  • 请确保有内容的最后一行是有公式的行。


如果您想在指定的工作表列表上使用该功能,您可以在示例代码中添加此功能。如果当前活动工作表名称未包含在列出的有效工作表中,这将退出该函数

  var validSheets = ["Sheet1", "Sheet2"];

  if(!validSheets.includes(sheet.getName())){
    return;
  }

【讨论】:

  • 如果您遇到问题,请告诉我,以便我可以相应地更新答案
  • 我的 Google 表格可能有多个表格。如何将此功能限制为仅插入指定的工作表?
  • 我更新了答案以添加工作表名称检查。只需将 Sheet1 替换为您指定的工作表名称
【解决方案2】:

删除最后一条评论...然后单击新菜单:此脚本将在活动表中添加一个新行

function onOpen() {
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('>> Action <<')
    .addItem('Copy last row (formulas only)', 'copyLastRow')
    .addToUi();
}
function copyLastRow() {
  var sh=SpreadsheetApp.getActiveSpreadsheet().getActiveSheet()
  var rng=sh.getRange(sh.getLastRow(),1,1,sh.getLastColumn())
  rng.copyTo(sh.getRange(sh.getLastRow()+1,1,1,sh.getLastColumn()), SpreadsheetApp.CopyPasteType.PASTE_FORMULA, false)
}

【讨论】:

    猜你喜欢
    • 2018-12-27
    • 2016-07-27
    • 1970-01-01
    • 1970-01-01
    • 2021-05-10
    • 2020-07-02
    • 1970-01-01
    • 1970-01-01
    • 2020-12-10
    相关资源
    最近更新 更多