Автосортировка данных, перемещаемых по сценарию - PullRequest
0 голосов
/ 06 ноября 2019

Моя проблема в том, что у меня есть данные, перемещаемые с одного листа на другой с помощью скрипта с пометкой «Завершено». В «Завершенном» листе я хочу отсортировать данные. У меня уже есть сценарий автосортировки, который работает только при отладке, даже не при редактировании (пробовал редактировать везде), не говоря уже о перемещении данных на лист.

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

Я не программист, и я довольноНовое в скрипте Google Apps. Я просто время от времени балуюсь кодом, потому что нахожу его интересным, поэтому даже не знаю, с чего начать, чтобы получить результаты, которые я ищу.

Это автосортировка,

function AutoSortOnEdit() {
  var sheetNames = ["Complete"];

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  sheetNames.forEach(function(name) {
    var sheet = ss.getSheetByName(name);
    var range = sheet.getRange(4, 1, sheet.getLastRow() - 1, 
sheet.getLastColumn());
    range.sort({column: 2, ascending: true});
  });
}

РЕДАКТИРОВАТЬ: я понял, что я использовал сценарий для нескольких листов. Я изменил его для одного листа, но те же проблемы.

function AutoSortOnEdit() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
    var sheet = ss.getSheetByName("Completed Returns");
    var range = sheet.getRange(4, 1, sheet.getLastRow() - 1, 
sheet.getLastColumn());
    range.sort({column: 2, ascending: true});
}

Любая помощь будет принята с благодарностью!

Ответы [ 3 ]

1 голос
/ 07 ноября 2019

Мне удалось заставить его работать, скомбинировав 2 скрипта под одну функцию, вот так. Я не мог понять, как заставить функцию события работать при вызове нескольких функций, поэтому я просто объединил их. Над 2 "}" скобками находится сценарий перемещения, а под ними - автосортировка.

function onEdit(e) {
  var ss = e.source;
  var s = ss.getActiveSheet();
  var r = e.range;

  var actionCol = 24;
  var nameCol = 24;
  var rowIndex = r.getRowIndex();
  var colIndex = r.getColumnIndex();

  var colNumber = s.getLastColumn();

  if (e.value == "TRUE" && colIndex == actionCol) {
    var targetSheet = ss.getSheetByName("Completed Returns");
    if (ss.getSheetByName("Completed Returns")) { 
      var targetSheet = ss.getSheetByName("Completed Returns");
      var targetRange = targetSheet.getRange(targetSheet.getLastRow()+1, 1, 1, colNumber);
      var sourceRange = s.getRange(rowIndex, 1, 1, colNumber); 
      sourceRange.copyTo(targetRange);
      s.deleteRow(rowIndex);
    }
  }
  var sheet = ss.getSheetByName("Completed Returns");
    var range = sheet.getRange(4, 1, sheet.getLastRow() - 1, sheet.getLastColumn());
    range.sort({column: 2, ascending: true});
}

Спасибо всем за ответ!

0 голосов
/ 06 ноября 2019

Вы можете использовать функцию Sort для сортировки набора данных.

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

Вы также можете создать FilterView , который сортирует весь лист на основе ваших параметров. В отличие от фильтров, FilterViews сохраняются между сессиями.

0 голосов
/ 06 ноября 2019

Вы можете добавить свою функцию друг к другу

function AutoSortOnEdit() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('Completed Returns');
  var range = sheet.getRange(
    4,
    1,
    sheet.getLastRow() - 1,
    sheet.getLastColumn()
  );
  range.sort({ column: 2, ascending: true });
}

function copyData() {}

function userActionRun() {
  copyData();
  AutoSortOnEdit();
}

Теперь вы можете связать ее с событием EDIT

function onEdit(){
  userActionRun();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...