Перемещение строк на другой лист на основе скрипта значения ячейки - PullRequest
1 голос
/ 17 апреля 2019

Глядя, чтобы переместить ячейки на основе значения в листах Google с помощью сценария. Супер зеленый для всего этого, просто после просмотра некоторых видео по основам и использования кода, найденного на сайте, пытаясь сделать эту работу для моей таблицы.

function doneCopy() {

 var app = SpreadsheetApp;
 var ss = SpreadsheetApp.getActiveSpreadsheet();
 var sheetNameToWatch = ss.getSheetByName("Current")
 var columnNumberToWatch = 8;
 var valueToWatch = "DONE" ;
 var sheetNameToMoveTheRowTo = "OLD";

 //var ss = SpreadsheetApp.getActiveSpreadsheet();//this has already been declared
 var sheet = SpreadsheetApp.getActiveSheet();
 var range = sheet.getActiveCell();

 if (sheet.getName() == "Current" && range.getColumn() == 8 && range.getValue() == "DONE") {
   var targetSheet = ss.getSheetByName("OLD");
   var targetRange = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);

   sheet.getRange(range.getRow(), 1, 1, sheet.getLastColumn()).moveTo(targetRange);
   sheet.deleteRow(range.getRow());
 }

}

Кажется, он вообще не работает. Вот ссылка на таблицу: https://docs.google.com/spreadsheets/d/1iRMuKKhC83lot4TV2dbOfBlgdtVzSuZ0rkoWKyTOUIM/edit?usp=sharing

Конечная цель: если для столбца «Статус» задано значение «ГОТОВО», вся строка перемещается на «СТАРЫЙ» лист (добавление строки внизу), а затем удаляется с «Текущего» листа

Ответы [ 2 ]

0 голосов
/ 17 апреля 2019
  • Вы хотите переместить все строки, для которых в столбце «H» указано «Готово», на лист «СТАРЫЙ», запустив сценарий.
  • Вы хотите запустить скрипт через пользовательское меню.

Я мог понять, как выше. Если мое понимание верно, как насчет этой модификации? Я думаю, что есть несколько ответов для вашей ситуации. Поэтому, пожалуйста, подумайте об этом как об одном из них. Процесс этого модифицированного сценария выглядит следующим образом.

  1. Получить значения столбца "H" на листе "Текущий".
  2. Получение индексов строк для перехода на лист "СТАРЫЙ".
  3. Переместить значения.
  4. Удалить строки.

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

function onOpen() {
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('Custom Menu')
      .addItem('doneCopy', 'doneCopy')
      .addToUi();
}

function doneCopy() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName("Current");
  var values = sheet.getRange(1, 8, sheet.getLastRow(), 1).getValues();
  var moveRows = values.reduce(function(ar, e, i) {
    if (e[0] == "DONE") ar.push(i + 1);
    return ar;
  }, []);
  var targetSheet = ss.getSheetByName("OLD");
  moveRows.forEach(function(e) {
    sheet.getRange(e, 1, 1, sheet.getLastColumn()).moveTo(targetSheet.getRange(targetSheet.getLastRow() + 1, 1));
  });
  moveRows.reverse().forEach(function(e) {sheet.deleteRow(e)});
}

Примечание:

  • onOpen() запускается при открытии электронной таблицы. После открытия электронной таблицы, пожалуйста, запустите скрипт из пользовательского меню.

Ссылки:

0 голосов
/ 17 апреля 2019

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

SpreadsheetApp.getUi().createMenu('New Menu') {
  .addItem('Run', 'doneCopy')
  .addToUi()
}

function doneCopy() {
 var ss=SpreadsheetApp.getActive();
 var sheet=SpreadsheetApp.getActiveSheet();
 var range=sheet.getActiveCell();
 if (sheet.getName()=="Current" && range.getColumn()==8 && range.getValue()=="DONE") {
   var targetSheet=ss.getSheetByName("OLD");
   var targetRange=targetSheet.getRange(targetSheet.getLastRow() + 1, 1);//column one
   sheet.getRange(range.getRow(), 1, 1, sheet.getLastColumn()).moveTo(targetRange);
   sheet.deleteRow(range.getRow());
 }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...