Как отсортировать 2 разных способа из ячейки проверки данных onEdit - PullRequest
0 голосов
/ 02 марта 2019

Я пытаюсь создать триггер onEdit для сортировки списка 1 из 2 способов.Способ сортировки списка определяется проверкой данных.Один вариант сортировки (только имя) будет столбец 3 по возрастанию.Второй вариант (Имя и TH) будет сортировать столбец 4 по убыванию, а затем столбец по возрастанию.

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

function sortRoster() {

  var activeSheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var roster = activeSheet.getRange("B8:D77");
  var sorter = activeSheet.getRange("G4");

  roster.sort( [{ column : 4, ascending: false },{ column : 3, ascending: true }] );
  var clear = activeSheet.getRange("G4").clearContent().setValue("Do you want to Sort?");
}

function onEdit(e) {
  // test if G4 was modified
  if (e.source.getActiveSheet() && e.range.rowStart === 4 && e.range.columnStart === 7) {
    sortRoster(); 

  }
}

Я попытался сначала добавить другую функцию (вызывая ее sortName()), которая запускала бы сортировку в столбце 3только.

function sortName() {

  var activeSheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var roster = activeSheet.getRange("B8:D77");

  roster.sort( [{ column : 3, ascending: true }] );
  var clear = activeSheet.getRange("G4").clearContent().setValue("Do you want to Sort?");

Затем я попытался изменить if на

if (e.source.getActiveSheet() && activeCell == "Name Only") {
  sortName();
  sorter.clearContent().setValue("Choose how to Sort?");
} else if (e.source.getActiveSheet() && activeCell == "Name and TH") {
  sortRoster();
  sorter.clearContent().setValue("Choose how to Sort?");
}

Эта идея не работает, и я не понимаю, почему.
Мне кажется, я не до конца понимаю, кактриггер событий работает даже после моего исследования онлайн.Я видел несколько страниц, таких как этот , которые похожи, но, кажется, не решают ту же проблему, что и я.

Заранее благодарю за помощь и руководство.

1 Ответ

0 голосов
/ 03 марта 2019

Сортировка onEdit () через пару флажков

Для этого требуется пара флажков в A4 и A5.Это часть чего-то другого.Вам также необходимо создать устанавливаемый триггер onEdit для onCheckOpenSideBar (e), или вы можете использовать предоставленную функцию.

function onCheckOpenSideBar(e) {
  if(e.range.getSheet().getName()!='Sheet1')return;
  if(e.range.rowStart==4 && e.range.columnStart==1) {
    if(e.value=='TRUE') {
      sortByCol(3);
      e.range.getSheet().getRange(e.range.rowStart,e.range.columnStart).setValue("FALSE");
    }
  }
  if(e.range.rowStart==5 && e.range.columnStart==1) {
    if(e.value=='TRUE') {
      sortByCol(4,5);
      e.range.getSheet().getRange(e.range.rowStart,e.range.columnStart).setValue("FALSE");
    }
  }
}

function sortByCol(col,col2) {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('Sheet1');
  var rg=sh.getRange(1,3,getColumnHeight(col,sh,ss),3);
  if(col2) {
    rg.sort([{column: col,ascending:true},{column: col2,ascending:true}]);
  }else{
    rg.sort({column: col, ascending:true});
  }
}

function createOnEditTrigger() {
  ScriptApp.newTrigger('onCheckOpenSideBar').forSpreadsheet('Spreadsheet ID').onEdit().create();
}

Так выглядит моя электронная таблица перед сортировкой.

enter image description here

Флажки в A2 и A3 использовались для открытия боковой панели и диалога.

Добавление использования валидации DropDown

function onCheckOpenSideBar(e) {
  if(e.range.getSheet().getName()!='Sheet1')return;
  if(e.range.rowStart==2 && e.range.columnStart==1) {
    if(e.value=='TRUE') {
      openTheSidebar();
      e.range.getSheet().getRange(e.range.rowStart,e.range.columnStart).setValue("FALSE");
    }
  }
  if(e.range.rowStart==3 && e.range.columnStart==1) {
    if(e.value=='TRUE') {
      openTheDialog();
      e.range.getSheet().getRange(e.range.rowStart,e.range.columnStart).setValue("FALSE");
    }
  }
  if(e.range.rowStart==4 && e.range.columnStart==1) {
    if(e.value=='TRUE') {
      sortByCol(3);
      e.range.getSheet().getRange(e.range.rowStart,e.range.columnStart).setValue("FALSE");
    }
  }
  if(e.range.rowStart==5 && e.range.columnStart==1) {
    if(e.value=='TRUE') {
      sortByCol(4,5);
      e.range.getSheet().getRange(e.range.rowStart,e.range.columnStart).setValue("FALSE");
    }
  }
  if(e.range.rowStart==6 && e.range.columnStart==1) {
    if(e.value=='C') {
      sortByCol(3);
    }
  }
  if(e.range.rowStart==6 && e.range.columnStart==1) {
    if(e.value=='D,E') {
      sortByCol(4,5);
    }
  }
}

Теперь это выглядит так:

enter image description here

Или вот это:

enter image description here

Диалог проверки данных:

enter image description here

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