【问题标题】:Loop to disable function in onEdit script循环以禁用 onEdit 脚本中的功能
【发布时间】:2019-06-06 00:55:34
【问题描述】:

我有一个脚本,通过单击复选框(具有是/否值)将特定值添加到工作表的最后一行,并通过取消选中相同的复选框来删除该行。它工作正常 但因为它是 onEdit 脚本 - 它继续添加值。我正在尝试循环所有这些工作以检查该值是否已经存在,如果是 - 什么也不做。我开发了以下内容,但它不起作用 - 每次编辑都会添加值。这是代码

function onEdit() {
  var ss = SpreadsheetApp.getActiveSpreadsheet()
  var sheet = ss.getActiveSheet()
  var paramrange = sheet.getRange('A55:C60')
  var destn = sheet.getRange(sheet.getLastRow()+1, 1)
  var destnorma = sheet.getRange(sheet.getLastRow()+1, 2)
  var orpac = sheet.getRange('E23')
  var rows = sheet.getDataRange();
  var numRows = rows.getNumRows();
  var values = rows.getValues();

for (var i = 0; i <= numRows - 1; i++) {
         var row = values[i];
         if (row[0] == 'ORP Ac') {
         } else{

  if(orpac.getValue() == 'yes') {
      var orpacn = 'ORP Ac';
      var orpacnorm = '-150';
      destn.setValue(orpacn)
      destnorma.setValue(orpacnorm)
      } else
      { 
         var rows = sheet.getDataRange();
         var numRows = rows.getNumRows();
         var values = rows.getValues();

         var rowsDeleted = 0;
         for (var i = 0; i <= numRows - 1; i++) {
         var row = values[i];
         if (row[0] == 'ORP Ac') {
         sheet.deleteRow((parseInt(i)+1) - rowsDeleted);
         rowsDeleted++;
 }
 }}

}
}}

【问题讨论】:

  • 试图澄清你的问题。您是否正在寻找一个脚本来检查第一列是否等于“ORP Ac”,如果是则什么也不做,如果不是则运行您的 for 循环?
  • 是的,正是……

标签: google-apps-script google-sheets


【解决方案1】:

您的第二个循环在第一个循环内,它使用相同的索引。这是个问题。

这可能会更好。但我无法确定,因为我没有你的数据。

function onEdit() {
  var ss=SpreadsheetApp.getActive()
  var sheet=ss.getActiveSheet()
  var paramrange=sheet.getRange('A55:C60')
  var destn=sheet.getRange(sheet.getLastRow()+1, 1)
  var destnorma=sheet.getRange(sheet.getLastRow()+1, 2)
  var orpac=sheet.getRange('E23')
  var orpacvalue=orpac.getValue();
  var rows=sheet.getDataRange();
  var numRows=rows.getNumRows();
  var values=rows.getValues();

  for (var i=0;i<numRows;i++) {
    var row=values[i];
    if (row[0]!='ORP Ac') {      
      if(orpacvalue=='yes') {
        var orpacn = 'ORP Ac';
        var orpacnorm = '-150';
        destn.setValue(orpacn)
        destnorma.setValue(orpacnorm)
      } else
      { 
        var rows = sheet.getDataRange();
        var numRows = rows.getNumRows();
        var values = rows.getValues();

        var rowsDeleted = 0;
        for (var j = 0; j<numRows; j++) {
          var row = values[j];
          if (row[0] == 'ORP Ac') {
            sheet.deleteRow((parseInt(j)+1) - rowsDeleted);
            rowsDeleted++;
          }
        }
      }
    }
  }
}

对于一个需要在 30 秒内完成的简单触发器来说,这似乎是很多脚本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-03
    • 1970-01-01
    • 2022-11-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多