如何自动插入新行并保留最后一行的函数/公式?


24

我有一张桌子,上面有带有函数/公式的单元格,像这样:

在此处输入图片说明

我需要一个脚本来创建新行,并用它来复制最后使用的行的函数/公式。我发现此脚本会创建新行,但不会复制function / formulas。如何在Google Apps脚本中实现此格式复制任务而无需手动选择和复制?


如果我以前的行公式是= HTTPResponse(C4),我如何复制相同的公式但新行的新单元格编号呢?
user1788736 2015年

Answers:


20

使用以下代码将公式的值也复制为普通值。通过从电子表格菜单中选择“工具”来添加代码。然后选择脚本编辑器并添加代码。确保按下“错误”按钮并验证脚本。

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

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

function addRow() {
  var sh = ss.getActiveSheet(), lRow = sh.getLastRow(); 
  var lCol = sh.getLastColumn(), range = sh.getRange(lRow,1,1,lCol);
  sh.insertRowsAfter(lRow, 1);
  range.copyTo(sh.getRange(lRow+1, 1, 1, lCol), {contentsOnly:false});
}

备注

contentOnly设置为false将产生标准副本。将其设置为true,将仅粘贴值。您发现的示例脚本除了粘贴值外还可以做更多.....

我为您创建了一个示例文件:使用公式添加行


3

此ArrayFormula可以执行相同的操作而无需使用脚本。在D4中输入它,它将自动在它下面的任何空白单元格中结转。

ArrayFormula(vlookup(B4:B:tax_table!$A$2:$G$8;3;true))

注意:“ B4:B”表示,查找从B4到列末尾的所有单元格。

同时,ArrayFormula负责将自身复制到其下面的单元格中。只需确保其下方的单元格为空。


3

如果您需要在第一行(第一行)上添加新行并从第一行的顶部复制公式,则需要在using getFormulas()setFormulas()函数之间复制公式。firstRow例如,如果电子表格具有标题,则可以将值更改为2。

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

1
嗨,丹尼斯,您是指我创建的帖子吗?我只是检查了脚本,它仍在工作。问候雅各布·扬
雅各布·扬·图斯特拉2016年

嗨,@ JacobJanTuinstra,是的,您是对的。我实际上是在尝试在顶部添加新行,并保留同一行中的公式,但它不起作用,因为脚本试图从新创建的空行中复制数据。我将更新我的答案以反映这一点。谢谢您
dgpro

嗨@DenGordo!谢谢你 如果我只有要移动的值而不是公式,该如何修改呢?谢谢!
Drewdavid

哦PS-我在哪里引用我正在处理的选项卡?再次感谢。
Drewdavid

-2

为了解决此问题,我使用了setFormula(range),例如:

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];

var cell = sheet.getRange("B5");
 cell.setFormula("=SUM(B3:B4)");

您的公式将相应地自动增加到行索引。

最后,您可以添加onUpdate或onEdit触发器。


-1; 代码是如何产生的?您要添加一笔总和,但是您需要实际添加一行。该onUpdate触发器不存在。
Jacob Jan Tuinstra 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.