首页 > 解决方案 > 删除行 - Google Apps 脚本“找不到方法 deleteRow((class))”

问题描述

这是我的功能:

function deleteContact(){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var wsname = ss.getRangeByName("contactName").getValue();
  var wscl = ss.getSheetByName('Connection List');
  var wsRange = wscl.getRange("A1:A").getValues();

  for(var i = 0; i<wsRange.length;i++){
    if(wsRange[i][0] == wsname){ 
      var row = i+1; //This gets the row number 
    }
  var ui = SpreadsheetApp.getUi();
  var response = ui.alert("Are You Sure You Want To Delete " + wsname, ui.ButtonSet.YES_NO);

    if (response == ui.Button.YES) {
      var delr = wscl.deleteRow(row);
} 
  }
    }

我能够获取行号,但是一旦单击“是”按钮,就会收到此错误:

找不到方法 deleteRow((class))。

有什么建议么?我希望函数删除它找到的行。

标签: functiongoogle-apps-scriptdelete-row

解决方案


尝试这个:

function deleteContact(){
  var ss=SpreadsheetApp.getActive();
  var wsname=ss.getRangeByName("contactName").getValue();
  var wscl=ss.getSheetByName('Connection List');
  var wsValues=wscl.getRange(1,1,wscl.getLastRow(),1).getValues();
  var d=0;
  for(var i=0;i<wsValues.length;i++){
    if(wsValues[i][0]==wsname){ 
      var row=i+1-d; //This gets the row number 
      var ui=SpreadsheetApp.getUi();
      var response=ui.alert("Are You Sure You Want To Delete " + wsname, ui.ButtonSet.YES_NO);
      if (response == ui.Button.YES) {
        wscl.deleteRow(row);
        d++;
      } 
    }
  }
}

当您删除行时,留下的行每次都会向上移动一行,但数据是在删除行之前获取的,因此用于从数据数组计算地址的索引必须通过已删除的行数进行补偿.

你也有一些应该在范围内的行,if(wsValues[i][0]==wsname){而不是所以我把它们移进去了,现在它只删除了具有正确名称的行。


推荐阅读