Скрипт Google Sheets для перестановки строк - PullRequest
0 голосов
/ 14 марта 2019

Попытка создать Google Sheet, который позволяет выбрать приоритет строки с опцией выбора.

Вот основной алгоритм, который я пытаюсь построить:

1 Пользователь изменяет приоритет строки, используя раскрывающийся список (Примечание: эта часть работает нормально)

2Отредактированная строка переместится вверх в позицию, основанную на новом приоритете (Примечание: эта часть работает нормально)

3 Все остальные строки будут менять свои номера в зависимости от отредактированной ячейки (т.е. скажем, отредактированная ячейка была изначально13 и изменилось на 4. Я хочу, чтобы старое 4 стало 5, а все с 5 до 12 увеличилось 1)

Проблема, с которой я столкнулся, заключается в том, что, когда ячейка меняется на номер 4, она переходит подстарый номер 4 - следовательно, цикл for не работает.

Кто-нибудь делал что-нибудь подобное или есть предложения?

function onEdit(event) {
  var activeSheet = SpreadsheetApp.getActiveSheet();
  var editedCell = activeSheet.getActiveCell();


  var columnToSortBy = 1;
  var tableRange = "A2:M22";

  if(editedCell.getColumn() == columnToSortBy){
   var priority =  editedCell.getValue();
   var range = activeSheet.getRange(tableRange);
   var time = new Date();
    time = Utilities.formatDate(time, "GMT", "HH:mm:ss");
   var nextCell = editedCell.offset(0, 13);
    nextCell.setValue(time);


   range.sort({ column: columnToSortBy, ascending: true});

  } 
}

function rearrangeRows() {
  var i;

  var ss = SpreadsheetApp.getActiveSheet();
  var startRow = 1;
  var endRow = ss.getLastRow();
  var getRange = ss.getDataRange();
  var getRow = getRange.getRow();

  var testPriority = 3;

  var cell = ss.getRange("A4");
  var cellValue = cell.getValue();
  if (cellValue > number) {
   Logger.log(cellValue);  
  }
  Logger.log(number);

 // for(i; i > )
}

1 Ответ

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

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

var endRow = activeSheet.getLastRow();
for (var i = 1; i <= endRow; i ++) {
    var currentCell = activeSheet.getRange("A" + i);
    if (currentCell.getValue() > priority && i != editedCell.getRow()) {
         currentCell.setValue(currentCell.getValue() + 1)
    }
}
...