简体   繁体   English

我正在尝试为三个单独的选项卡运行 onEdit 函数,但收到 TypeError:无法读取未定义的属性“值”

[英]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.

相关问题 类型错误:无法读取未定义的属性“then”。 当我尝试运行 updatefirst 函数时出现此错误 - TypeError: Cannot read property 'then' of undefined. Getting this error when I am trying to run updatefirst function 为什么我收到 TypeError:无法读取未定义的属性“执行” - Why am I receiving TypeError: cannot read property 'execute' of undefined 为什么在定义的数组上收到“ ERROR TypeError:无法读取未定义的属性'length'的信息”? - Why am I receiving “ERROR TypeError: Cannot read property 'length' of undefined” on a defined array? TypeError:无法读取未定义 onEdit 的属性“源” - Google Apps 脚本 - TypeError: Cannot read property 'source' of undefined onEdit - Google Apps Script 为什么我收到无法读取未定义的属性“状态”? - Why am I receiving Cannot read property 'state' of undefined? 我正在尝试调度一个操作,但收到此错误:“未处理的拒绝(TypeError):无法读取未定义的属性'类型'” - I am trying to dispatch a action but getting this error: “ Unhandled Rejection (TypeError): Cannot read property 'type' of undefined” 类型错误:当我尝试访问 API 调用数据时,无法读取未定义的属性“映射” - TypeError: Cannot read property 'map' of undefined when I am trying to access API call data 运行此程序后出现错误,Uncaught TypeError:无法读取未定义的属性“ push” - I am getting error after run this program, Uncaught TypeError: Cannot read property 'push' of undefined 我试图运行命令 Discord.js 但出现错误“TypeError:无法读取未定义的属性'get'” - i m trying to run a command Discord.js but error appear “TypeError: Cannot read property 'get' of undefined” 为什么我收到“ TypeError:无法读取未定义的属性” length” - Why am I getting 'TypeError: Cannot read property 'length' of undefined'
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM