Удаление строки - Google Apps Script "Не удается найти метод deleteRow ((class))" - PullRequest
1 голос
/ 27 января 2020

Вот моя функция:

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)).

Есть предложения? Я хочу, чтобы функция удалила найденную строку.

1 Ответ

1 голос
/ 27 января 2020

Попробуйте это:

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){, но это не так, я их переместил, и теперь это только удаляет строки с правильным именем.

...