GoogleSheets:基于时间的触发器运行的函数会抛出错误,而onEdit可以工作



这个基于onEdit的函数可以工作:

function onEdit(e) {

const row = e.range.getRow();
const col = e.range.getColumn();
const as = e.source.getActiveSheet();
const sheet_name = 'Sheet1'
const ss = SpreadsheetApp.getActive();
const sh = ss.getSheetByName(sheet_name);

const values = sh.getRange('A2:A'+sh.getLastRow()).getValues().flat([1]);    

if(as.getName() == sheet_name && col == 1 && row > 1){  
var toCopy;
values.forEach((el,index)=>{                           
if (el!=''){
toCopy = sh.getRange(index+2,1).getValue();
}               
if(el==''){
sh.getRange(index+2,1).setValue(toCopy)
}
})
}
}

但是,如果我想使用基于时间的触发器执行此函数,并将函数名称从function onEdit(e)更改为function myFunc(e),则触发的执行将失败,错误如下:

TypeError: Cannot read property 'getRow' of undefined at myFunc(Code:3:23)-显示在失败的执行,

TypeError: Cannot read property 'range' of undefined (line 3, file "Code")-显示在脚本编辑器中。

这两个错误都涉及第二行const row = e.range.getRow();

如何使用基于时间的触发器无错误地执行此函数?

通过sandman的编辑,工作函数如下所示:

function fillMyRow() {

const ss = SpreadsheetApp.getActive();
const sh = ss.getSheetByName('Sheet1');

const values = sh.getRange('A2:A'+sh.getLastRow()).getValues().flat([1]);
var toCopy;
values.forEach((el,index)=>{
if (el != ''){
toCopy = sh.getRange(index+2,1).getValue();
} else {
sh.getRange(index+2,1).setValue(toCopy)
}
})
}

它是手动工作的,通过时间驱动的触发器执行,可以达到预期的结果。

相关内容

最新更新