переместить строку в последнюю строку другого листа на основе флажка

#google-apps-script #google-sheets

Вопрос:

кто — нибудь может мне помочь, пожалуйста-мне нужно переместить строку на другой лист на основе флажка. Я нашел код, и он работает, но он перемещает строку в и листа dest.

 function onEdit(e){
  var src = e.source.getActiveSheet();
  var r = e.range;
  if (src.getName() != "calculations" || r.columnStart != 13 || r.rowStart == 1) return;
  var dest = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("orders");
  src.getRange(r.rowStart,1,1,12).moveTo(dest.getRange(dest.getLastRow() 1,2,1,13));
  src.deleteRow(r.rowStart); 
}
 

Я попытался определить последнюю строку целевого листа, но после добавления этого в код это не работает

 function onEdit(e){
  var src = e.source.getActiveSheet();
  var r = e.range;
  if (src.getName() != "calculations" || r.columnStart != 13 || r.rowStart == 1) return;
  var dest = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("orders");
 
  var rng = dest.getRange("B1:M").getValues();
  var lrIndex;
  for(var i = rng.length-1;i>=0;i--){
    lrIndex=i;
    if(!rng[i].every(function(c){ return c == ""; })){
    break;
    }
    var lr = lrIndex   1;
  }
  
  src.getRange(r.rowStart,1,1,12).moveTo(dest.getRange(dest.lr,1,1,12));
  src.deleteRow(r.rowStart); 
}
 

кто-нибудь может мне помочь, пожалуйста?

Комментарии:

1. попробуйте это src.getRange(r.rowStart,1,1,12).moveTo(dest.getRange(dest.getDataRange().getNumRows() 1,1,1,12))

2. спасибо, что так быстро ответили. к сожалению, эти изменения не помогают. возможно, я неправильно описал свою проблему — у меня есть некоторые данные в листе «расчеты» от столбца A до L. Мне нужно, когда я нажму на флажок в столбце M, переместить эту строку на другой лист в последней пустой строке (не в конце листа) листа «порядок» в столбце B:M.

Ответ №1:

Вероятно, в строке есть ошибка:

 src.getRange(r.rowStart,1,1,12).moveTo(dest.getRange(dest.lr,1,1,12));
 

Так lr как это число, возможно, должно быть:

 src.getRange(r.rowStart,1,1,12).moveTo(dest.getRange(lr,1,1,12));
 

Просто lr вместо dest.lr этого .

Но я не пытался запустить сценарий, это всего лишь предположение.