Строки исчезают при установке флажка, нажмите GoogleAppscripts

#google-sheets #google-sheets-formula

#google-таблицы #google-таблицы-формула

Вопрос:

Я получил помощь по этому же коду здесь раньше, и он работал действительно отлично! Я очень благодарен stackoverflow и всем, кто вносит свой вклад и помогает друг другу. Мы уже некоторое время используем этот лист и заметили, что строки пропадают. Прямо сейчас пользователи могут установить флажок, чтобы переместить выбранную строку на другую вкладку листа. Иногда, не всегда, он выбирает строку и только перемещает строку под ней на предполагаемый лист и удаляет фактическую выбранную строку. Где? У меня нет Idea…SO ! Я начал с нового листа, и это все еще происходит. Я думаю, что я сузил его до строки, которая ссылается на команду «.getLastRow». Я пробовал .getActiveRow и это не сработало. Есть ли альтернатива getLastRow, которая относится ТОЛЬКО к строке, выбранной флажком? Я думаю, что он считает, что строка ниже является последней строкой, и переносит ее.

Кроме того, если вы знаете лучший способ сделать это, пожалуйста, дайте мне знать. Существуют ли формулы или массивы, которые могли бы сделать это лучше? У меня есть привычка чрезмерно усложнять things…so может быть, код не нужен? В любом случае, спасибо за ваше время!!

Другие используемые формулы: «= ARRAYFORMULA (‘Ответы на прием’!B2: L)» и «= запрос (‘к АБДИ’!A2: N, «ВЫБЕРИТЕ *, где J = ‘Нет'»)»

Видео исчезновения

Ссылка на новый лист

Код:

 function onForm(){
  
  var s = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sort");
  var targetSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("To ABDI");
  var r = s.getLastRow();
  var col = s.getLastColumn();
  var target = targetSheet.getRange(targetSheet.getLastRow()   1,1,1,11);
    s.getRange(r, 1, 1,col).copyTo(target);
    targetSheet.getRange('O2:O').uncheck();
    targetSheet.getRange(targetSheet.getLastRow()   0,15).activate().insertCheckboxes();
}

function onEdit() {
  // assumes source data in sheet named Upcoming
  // target sheet of move to named Current
  // getColumn with check-boxes is currently set to column 1 or A
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = SpreadsheetApp.getActiveSheet();
  var r = SpreadsheetApp.getActiveRange();

  if(s.getName() == "To ABDI" amp;amp; r.getColumn() == 15 amp;amp; r.getValue() == true) {
    var row = r.getRow();
    var numColumns = s.getLastColumn();
    var targetSheet = ss.getSheetByName('Schedule');
    var target = targetSheet.getRange(targetSheet.getLastRow()   1,1,1,15);
    s.getRange(row, 1, 1, numColumns).moveTo(target);
    s.deleteRow(row);
    targetSheet.getRange('O2:O').uncheck();
    targetSheet.getRange(targetSheet.getLastRow()   0,16).activate().insertCheckboxes();
  }
}

function onEditF() {
  // assumes source data in sheet named Upcoming
  // target sheet of move to named Current
  // getColumn with check-boxes is currently set to column 1 or A
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = SpreadsheetApp.getActiveSheet();
  var r = SpreadsheetApp.getActiveRange();

  if(s.getName() == "Schedule" amp;amp; r.getColumn() == 15 amp;amp; r.getValue() == true) {
    var row = r.getRow();
    var numColumns = s.getLastColumn();
    var targetSheet = ss.getSheetByName('Followup');
    var target = targetSheet.getRange(targetSheet.getLastRow()   1,1,1,15);
    s.getRange(row, 1, 1, numColumns).moveTo(target);
    s.deleteRow(row);
    targetSheet.getRange('O2:O').uncheck();
    targetSheet.getRange(targetSheet.getLastRow()   0,16).activate().insertCheckboxes();
  }
}

function onEditB() {
  // assumes source data in sheet named Upcoming
  // target sheet of move to named Current
  // getColumn with check-boxes is currently set to column 1 or A
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = SpreadsheetApp.getActiveSheet();
  var r = SpreadsheetApp.getActiveRange();

  if(s.getName() == "Followup" amp;amp; r.getColumn() == 15 amp;amp; r.getValue() == true) {
    var row = r.getRow();
    var numColumns = s.getLastColumn();
    var targetSheet = ss.getSheetByName('Schedule');
    var target = targetSheet.getRange(targetSheet.getLastRow()   1,1,1,15);
    s.getRange(row, 1, 1, numColumns).moveTo(target);
    s.deleteRow(row);
    targetSheet.getRange('O2:O').uncheck();
    targetSheet.getRange(targetSheet.getLastRow()   0,16).activate().insertCheckboxes();
  }
}

function onEditD() {
  // assumes source data in sheet named Upcoming
  // target sheet of move to named Current
  // getColumn with check-boxes is currently set to column 1 or A
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = SpreadsheetApp.getActiveSheet();
  var r = SpreadsheetApp.getActiveRange();

  if(s.getName() == "Schedule" amp;amp; r.getColumn() == 16 amp;amp; r.getValue() == true) {
    var row = r.getRow();
    var numColumns = s.getLastColumn();
    var targetSheet = ss.getSheetByName("Done");
    var target = targetSheet.getRange(targetSheet.getLastRow()   1,1,1,16);
    s.getRange(row, 1, 1, numColumns).moveTo(target);
    s.deleteRow(row);
  }
}

function onEditFD() {
  // assumes source data in sheet named Upcoming
  // target sheet of move to named Current
  // getColumn with check-boxes is currently set to column 1 or A
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = SpreadsheetApp.getActiveSheet();
  var r = SpreadsheetApp.getActiveRange();

  if(s.getName() == "Followup" amp;amp; r.getColumn() == 16 amp;amp; r.getValue() == true) {
    var row = r.getRow();
    var numColumns = s.getLastColumn();
    var targetSheet = ss.getSheetByName("Done");
    var target = targetSheet.getRange(targetSheet.getLastRow()   1,1,1,16);
    s.getRange(row, 1, 1, numColumns).moveTo(target);
    s.deleteRow(row);
  }
}
 

Ответ №1:

Я думаю, что одна из проблем в коде заключается в использовании activeRange и activeSheet когда вы можете просто использовать объект event.

Модифицированный скрипт

Для меня после изменения этого фрагмента кода и создания копии вашего листа проблема была решена:

 
function onEdit(e) {
  // Moved the checked row in `To ABDI` to `Schedule` 
  // And removing the moved row and uncheck
  var ss = e.source;
  let r = e.range;
  var s = e.range.getSheet();

  if(s.getName() == "To ABDI" amp;amp; r.getColumn() == 15 amp;amp; r.getValue() == true) {
    // Get edited range (row and number of columns)
    var row = r.getRow();
    var numColumns = s.getLastColumn();
    
    // Retrieveing the target sheet and range
    var targetSheet = ss.getSheetByName('Schedule');
    var target = targetSheet.getRange(targetSheet.getLastRow()   1,1,1,15);
    
    s.getRange(row, 1, 1, numColumns).moveTo(target);
    
    // Delete moved sheet
    s.deleteRow(row);

    targetSheet.getRange('O2:O').uncheck();
    targetSheet.getRange(targetSheet.getLastRow()   0,16).activate().insertCheckboxes();
  }
}
 

Результат

GIF измененного решения

Ссылка

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

1. Вау. Я поражен вашими усилиями здесь. Большое вам спасибо за то, что прошли через все это; тестирование, переписывание, захват gif и размещение ссылок. Сказать, что я действительно ценю вас и ваши усилия, не совсем понятно, но я начну с этого. Большое вам спасибо за ваше время. Я внес эти изменения сегодня утром и сказал сотрудникам войти туда и посмотреть, сможем ли мы «сломать» его вместе. Пока все выглядит довольно хорошо, и мы щелкаем по всему :). ТАААК благодарен!