Перемещение строк с нескольких листов с помощью флажка и сценария на один лист - PullRequest
1 голос
/ 19 марта 2020

С помощью этого замечательного сообщества я создал сценарий, в котором я могу переместить строку на другой лист, установив флажок в столбце А. Использование одного сценария для копирования текста из ячеек в строке на другой лист с использованием значок в ряд

Мне нужно больше листов с этой функцией флажка. Ie Арк2, Арк3 и так далее. Все должны перемещать данные в строке на лист "Sick" без перезаписи существующих данных.

Из моего существующего сценария работает только один лист "Ark1", и я уверен, что он перезапишет в лист "Sick", если я просто скопируйте скрипт и замените имена на листах.

Вот скрипт, который я использую.

function main(row) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = ss.getSheetByName('Ark1');
  var [v, d] = s.getRange(`B${row}:C${row}`).getValues()[0];
  var s2 = ss.getSheetByName('Sick');
  var timeZone = ss.getSpreadsheetTimeZone();
  var t = Utilities.formatDate(new Date(), timeZone, 'HH:mm:ss dd-MM-yyyy');
  s2.getRange(`A${row}:C${row}`).setValues([[t,v,d]]);
}

function onEdit(e) {
  const range = e.range;
  if (range.getSheet().getSheetName() == "Ark1" && e.value == "TRUE") {
    main(range.rowStart);
    range.uncheck();
  }
}

Редактируемую тестовую версию моего листа можно найти здесь: https://docs.google.com/spreadsheets/d/1z5TGWp3N002z0GNts4NRyspkjXcsN52rxPtx8Pu9D70/edit#gid = 1278602995

Как вы можете сказать, я новичок ie здесь - но медленно прогрессирует ...

1 Ответ

1 голос
/ 19 марта 2020

Ответ:

Вам нужно получить имя отредактированного листа, а не указывать «Ark1», и добавить его в конец листа «Sick», используя метод getLastRow().

Изменения кода:

function main(range) {
  var row = range.rowStart;
  var s = range.getSheet();
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var [v, d] = s.getRange(`B${row}:C${row}`).getValues()[0];
  var s2 = ss.getSheetByName('Sick');
  var timeZone = ss.getSpreadsheetTimeZone();
  var t = Utilities.formatDate(new Date(), timeZone, 'HH:mm:ss dd-MM-yyyy');
  s2.getRange(`A${s2.getLastRow() + 1}:C${s2.getLastRow() + 1}`).setValues([[t,v,d]]);
}

function onEdit(e) {
  const range = e.range;
  if (range.getSheet().getSheetName() != "Sick" && e.value == "TRUE") {
    main(range);
    range.uncheck();
  }
}

Надеюсь, это полезно для вас!

Ссылки:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...