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