Google Sheets Scripts on Open(e)将新行添加到工作表



我有一个自定义函数,它在工作表的最后一个非空行下插入一个新行,并将特定范围复制到这个新行。当我用自定义菜单项触发它时,这个函数工作得很好。

但是,当我将这个自定义函数添加到onOpen(e)触发器时,脚本不起作用。我排除了故障,并在我的函数中添加了一个警报-警报会触发,因此函数会在正确的位置读取。

请告诉我如何让我的脚本工作打开?

这是我的自定义功能代码:

function onOpen(e) {
autoAddRow();
}
function autoAddRow() { 
var updateFrequency = 3;
var lRow = getLastRow('A'); 
var lDate = all.getRange(lRow,1).getValue();  
var today = new Date();
Date.prototype.addDays = function(days) {
var dat = new Date(this.valueOf());
dat.setDate(dat.getDate() + days);
return dat;
}
var newDate = lDate.addDays(updateFrequency);
if (today >= newDate) {
var lCol = all.getLastColumn();
var src = all.getRange(3,1,1,6);
var dest = all.getRange(lRow+1,1,1,6);
if(lRow > 20) {
all.insertRowsAfter(lRow, 1);
}
src.copyTo(dest, {contentsOnly:false});
} else {
return;
}
}

因此,如果您的示例不是psuedo代码,它就无法工作。它在函数的第二行终止,因为该方法没有附加到类。

这是我的代码版本(我使用的是电子表格应用程序中的第一张表)。

function autoAddRow() { 
var updateFrequency = 3
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
var data = sheet.getDataRange();  
var lRow = data.getLastRow();
var lDate = new Date(sheet.getRange(lRow,1).getValue());
var today = new Date();
Logger.log(lDate);
Logger.log(lRow);
Logger.log(sheet.getRange(lRow,1).getValue());
Date.prototype.addDays = function(days) {
var dat = new Date(this.valueOf());
dat.setDate(dat.getDate() + days);
return dat;
}
var newDate = lDate.addDays(updateFrequency);
if (today >= newDate) {
Logger.log("passed if statement");
var lCol = data.getLastColumn();
var src = sheet.getRange(lRow,1,1,6);
var dest = sheet.getRange(lRow+1,1,1,6);
if(lRow > 20) {
all.insertRowsAfter(lRow, 1);
}
src.copyTo(dest, {contentsOnly:false});
} else {
return;
}
}

主要问题在于对范围和数据的调用。他们哪儿也没去。变量lDate需要被解析为日期(在我的版本中,我的日期列是第二列,而不是第一列*edit:快速更改代码以指向原始日期单元格*end edit),但你必须调用范围并获取值才能解析它,但在解决了获取数据的类问题后,剩下的就可以了。如果你输入onOpen,它甚至会起作用。

更新:我没有修复线路

if(lRow > 20) {
all.insertRowsAfter(lRow, 1);
}

事实上,我真的不确定它做了什么,因为它看起来只是在最后一行之后插入一行,而函数的其余部分就是这样做的。但是,除非将"all"更改为引用工作表对象,否则代码"as is"将在20行后中断。

最新更新