[英]I am trying to run the onEdit function for three separate tabs but receiving TypeError: Cannot read property 'value' of undefined
I am trying to run the onEdit function for three separate tabs but receiving TypeError: Cannot read property 'value' of undefined.我正在尝试为三个单独的选项卡运行 onEdit 函数,但收到 TypeError:无法读取未定义的属性“值”。 The first function onEdit(e) runs properly by itself but not with the other two functions.
第一个函数 onEdit(e) 单独运行正常,但不能与其他两个函数一起运行。
function onEdit(e) {
if (e.value === 'COMPLETED FAB') {
var sheet = e.range.getSheet();
if (sheet.getSheetName() == 'Fabrication') {
logSheet = e.source.getSheetByName('Fabrication Completed');
var row = e.range.getRow();
var lastRow = logSheet.getLastRow();
var range = sheet.getRange(row, 1, 1, sheet.getLastColumn());
range.copyTo(logSheet.getRange(lastRow + 1, 1));
sheet.deleteRow(row);
}
}
}
function onEdit(event) {
if (event.value === 'FINISHED') {
var sheet1 = event.range.getSheet();
if (sheet1.getSheetName() == 'Service') {
logSheet1 = event.source.getSheetByName('Service Completed');
var row1 = event.range.getRow();
var lastRow1 = logSheet1.getLastRow();
var range1 = sheet1.getRange(row, 1, 1, sheet.getLastColumn());
range1.copyTo(logSheet1.getRange(lastRow + 1, 1));
sheet1.deleteRow(row);
}
}
}
function onEdit(event2) {
if (event2.value === 'COMPLETED SURVEYS') {
var sheet2 = event2.range.getSheet();
if (sheet2.getSheetName() == 'Survey') {
logSheet2 = event2.source.getSheetByName('Fabrication');
var row2 = event2.range.getRow();
var lastRow2 = logSheet2.getLastRow();
var range2 = sheet2.getRange(row, 1, 1, sheet.getLastColumn());
range2.copyTo(logSheet2.getRange(lastRow + 1, 1));
sheet2.deleteRow(row);
}
}
}
You should have only one onEdit(e)
function and use if/else if statements to provide different functionalities for different event values.您应该只有一个
onEdit(e)
函数并使用 if/else if 语句为不同的事件值提供不同的功能。
function onEdit(e) {
if (e.value === 'COMPLETED FAB') {
// Rest of the code
}
else if (e.value === 'FINISHED') {
// Rest of the code
}
else if (e.value === 'COMPLETED SURVEYS') {
// Rest of the code
}
}
One of the core principles of programming is DRY (Don't repeat yourself).编程的核心原则之一是 DRY(不要重复自己)。 You have three functions that only differ in the string values that are used, which means that they can all be combined into one function quite easily.
您有三个函数,它们仅在使用的字符串值上有所不同,这意味着它们可以很容易地组合成一个函数。 Since you said that the first function runs no problem, it is likely that combining them would eliminate your error and create better code.
由于您说第一个函数运行没有问题,因此将它们组合起来很可能会消除您的错误并创建更好的代码。
In the example code below, note that the lines that don't change are outside of the if/then
statement.在下面的示例代码中,请注意未更改的行位于
if/then
语句之外。
function onEdit(e) {
// Set strings and corresponding values
let values = ["COMPLETED FAB","FINISHED","COMPLETED SURVEYS"];
let states = ["Fabrication Completed", "Service Completed", "Fabrication"];
var sheet = e.range.getSheet();
if (e.value === values[0]) {
if (sheet.getSheetName() == 'Fabrication') {
logSheet = e.source.getSheetByName(sates[0]);
}
} else if (e.value === values[1]) {
if (sheet1.getSheetName() == 'Service') {
logSheet1 = e.source.getSheetByName(states[1]);
}
} else if (e.value === values[2]) {
if (sheet2.getSheetName() == 'Survey') {
logSheet2 = e.source.getSheetByName(states[2]);
}
} else {
// No valid input
return false;
}
var row = e.range.getRow();
var lastRow = logSheet.getLastRow();
var range = sheet.getRange(row, 1, 1, sheet.getLastColumn());
range.copyTo(logSheet.getRange(lastRow + 1, 1));
sheet.deleteRow(row);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.