Как упростить и добавить сортировку в таблицы google?

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

function onEdit() {
  // moves a row from a sheet to another when a magic value is entered in a column
  // adjust the following variables to fit your needs
  // see https://productforums.google.com/d/topic/docs/ehoCZjFPBao/discussion

  var sheetNameToWatch = "Current";

  var columnNumberToWatch = 4;
  var valueToWatch = "Completed";
  var sheetNameToMoveTheRowTo = "Completed";

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = SpreadsheetApp.getActiveSheet();
  var range = sheet.getActiveCell();

  if (sheet.getName() == sheetNameToWatch && range.getColumn() == columnNumberToWatch && range.getValue() == valueToWatch) {
    var targetSheet = ss.getSheetByName(sheetNameToMoveTheRowTo);
    var targetRange = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    sheet.getRange(range.getRow(), 1, 1, sheet.getLastColumn()).moveTo(targetRange); 
    sheet.deleteRow(range.getRow());
  }

  var sheetNameToWatch = "Completed";

  var columnNumberToWatch = 4;
  var valueToWatch = "At Risk";
  var sheetNameToMoveTheRowTo = "Current";

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = SpreadsheetApp.getActiveSheet();
  var range = sheet.getActiveCell();

  if (sheet.getName() == sheetNameToWatch && range.getColumn() == columnNumberToWatch && range.getValue() == valueToWatch) {
    var targetSheet = ss.getSheetByName(sheetNameToMoveTheRowTo);
    var targetRange = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    sheet.getRange(range.getRow(), 1, 1, sheet.getLastColumn()).moveTo(targetRange);
    sheet.deleteRow(range.getRow());
  }

  var sheetNameToWatch = "Completed";

  var columnNumberToWatch = 4;
  var valueToWatch = "Hold";
  var sheetNameToMoveTheRowTo = "Current";

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = SpreadsheetApp.getActiveSheet();
  var range = sheet.getActiveCell();

  if (sheet.getName() == sheetNameToWatch && range.getColumn() == columnNumberToWatch && range.getValue() == valueToWatch) {
    var targetSheet = ss.getSheetByName(sheetNameToMoveTheRowTo);
    var targetRange = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    sheet.getRange(range.getRow(), 1, 1, sheet.getLastColumn()).moveTo(targetRange);
    sheet.deleteRow(range.getRow());
  }

  var sheetNameToWatch = "Completed";

  var columnNumberToWatch = 4;
  var valueToWatch = "Placed";
  var sheetNameToMoveTheRowTo = "Current";

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = SpreadsheetApp.getActiveSheet();
  var range = sheet.getActiveCell();

  if (sheet.getName() == sheetNameToWatch && range.getColumn() == columnNumberToWatch && range.getValue() == valueToWatch) {
    var targetSheet = ss.getSheetByName(sheetNameToMoveTheRowTo);
    var targetRange = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    sheet.getRange(range.getRow(), 1, 1, sheet.getLastColumn()).moveTo(targetRange);
    sheet.deleteRow(range.getRow());
  }

  var sheetNameToWatch = "Completed";

  var columnNumberToWatch = 4;
  var valueToWatch = "Safe";
  var sheetNameToMoveTheRowTo = "Current";

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = SpreadsheetApp.getActiveSheet();
  var range = sheet.getActiveCell();

  if (sheet.getName() == sheetNameToWatch && range.getColumn() == columnNumberToWatch && range.getValue() == valueToWatch) {
    var targetSheet = ss.getSheetByName(sheetNameToMoveTheRowTo);
    var targetRange = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    sheet.getRange(range.getRow(), 1, 1, sheet.getLastColumn()).moveTo(targetRange);
    sheet.deleteRow(range.getRow());
  }

  var sheetNameToWatch = "Completed";

  var columnNumberToWatch = 4;
  var valueToWatch = "Other";
  var sheetNameToMoveTheRowTo = "Current";

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = SpreadsheetApp.getActiveSheet();
  var range = sheet.getActiveCell();

  if (sheet.getName() == sheetNameToWatch && range.getColumn() == columnNumberToWatch && range.getValue() == valueToWatch) {
    var targetSheet = ss.getSheetByName(sheetNameToMoveTheRowTo);
    var targetRange = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    sheet.getRange(range.getRow(), 1, 1, sheet.getLastColumn()).moveTo(targetRange);
    sheet.deleteRow(range.getRow());
  }
}

Да, есть. Для начала вам необходимо решить проблему дублирования кода, которая у вас уже есть. Вы также, вероятно, захотите изучить метод Range#sort в Apps Script и то, как работать с массивами JavaScript. Поиск в Интернете должен помочь вам. Как есть, ваш запрос слишком широк - вам нужно попытаться реализовать желаемую функцию и попросить помощи в решении проблем, которые вы не можете решить.

tehhowch 10.08.2018 17:07

@LorelaiBirch Привет. Я смотрю на старые вопросы, которые, похоже, не решены. Как вы попали на? Вы решили проблему или вам все еще нужна помощь?

Tedinoz 09.01.2019 02:09
0
2
27
0

Другие вопросы по теме