我有一个Google电子表格,其中包含3个表(假设每个表都是5行乘5列)。
当我需要向其中一个表中添加新行时,我只需复制下面该表的最后一行(以便我也可以在新行中包含公式),然后使用新值重新对其进行编辑
但是,我希望有一个更简单的解决方案。我想选择一行,然后运行脚本。该脚本将复制下面的所选行,并使用空值初始化所有单元格。
我已经四处搜寻,但没有发现任何对我有帮助的:(。我发现了一些脚本,它们应该复制最后一行并带有诸如此类的公式:
// 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});
}
我想从该脚本开始,然后尝试修改脚本以执行我想要的操作。但是,我无法这样做。当我创建一个新脚本并粘贴该代码时,脚本将变为“ unrunnable” :(。我知道onOpen()是一种称为“触发器”的东西,它是某种保留的函数名(或类似名称)。与我的脚本无法运行有关? 请说明如何使复制的脚本像普通脚本一样运行,并向我提供实现所需功能的任何提示(在上面的特定位置添加带有上一行公式的行)。
答案 0 :(得分:2)
现在,由于您只想更新功能,所以不必担心onOpen,菜单只需运行addRow()。
我将其重写为:
function addRow() {
var ss=SpreadsheetApp.getActive();
var sh=ss.getActiveSheet();
var lr=sh.getLastRow();
var lc=sh.getLastColumn();
var rg=sh.getRange(lr,1,1,lc);
sh.insertRowsAfter(lr, 1);
rg.copyTo(sh.getRange(lr+1,1,1,lc), {contentsOnly:false});
}
因此,现在您拥有使addRow工作所需的一切。从那里我们可以进一步讨论您想要更改的内容。
此版本使用选定的行而不是最后一行。
function addRow() {
var ss=SpreadsheetApp.getActive();
var sh=ss.getActiveSheet();
var lr=sh.getActiveCell().getRow();
var lc=sh.getLastColumn();
var rg=sh.getRange(lr,1,1,lc);
sh.insertRowsAfter(lr, 1);
rg.copyTo(sh.getRange(lr+1,1,1,lc), {contentsOnly:false});
}