Есть ли решение этой формулы, останавливая сценарий автосортировки - PullRequest
0 голосов
/ 13 января 2019

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

Я создал скрипт автосортировки для документа листов Google, чтобы отсортировать список игроков по «Весу». Это работает нормально, пока я не добавлю следующую формулу. Как только я добавлю эту формулу, мои данные будут отсортированы по столбцу 7, по величине к наименьшему и не полностью. Странная часть этого состоит в том, что игроки, которые вышли из строя, перечислены как Заменители.

Как работает этот лист.
На вкладке Match Tool игроки выбираются из ячеек проверки данных.
Список проверки данных находится на вкладке MR1.
Вкладка MR1 получает его список на основе диапазона импорта, определенного в MRTool.

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

Формула, которая останавливает работу скрипта:

=if(or(C10="",C10=". Blank"),"",iferror(index('MR1'!$B$8:$H$87,(match(C10,'MR1'!$N$8:$N$87,0))),"Player Not Found"))

Скрипт для автосортировки:


  var roster = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Match Tool");
  var range1 = roster.getRange("B10:K59");
  var range2 = roster.getRange("N10:W59");

  range1.sort( [{ column : 7, ascending: false}, { column : 11, ascending: false}] );
  range2.sort( [{ column : 19, ascending: false}, { column : 23, ascending: false}] );
 }

function SortLeft() {

  var roster = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Match Tool");
  var range1 = roster.getRange("B10:K59");

  range1.sort( [{ column : 7, ascending: false}, { column : 11, ascending: false}] );
 }

function SortRight() {

  var roster = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Match Tool");
  var range2 = roster.getRange("N10:W59");

  // It seems that column numbers are always sequential from the first one, even if you are addressing a range. Hence using 14/18 here instead of 4/8

  range2.sort( [{ column : 19, ascending: false}, { column : 23, ascending: false}] );
 }

function SortSelection() {

  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var range = sheet.getActiveRange();
  var firstcol = range.getColumn();
  var lastcol = range.getLastColumn();

  //Before sorting, this code checks to make sure that Clan through Combined heroes is selected on one side or the other. If not, an error appears.

  if (firstcol == 2 && lastcol == 11 ) {  range.sort( [{ column : 7, ascending: false}, { column : 11, ascending: false}] )} //&& lastcol == 11
  else if ( firstcol == 14 && lastcol == 23 ) { range.sort( [{ column : 19, ascending: false}, { column : 23, ascending: false}] )} //&& lastcol == 23 
  else { SpreadsheetApp.getUi().alert('You can only sort selections that include all 8 data columns, from Clan to Notes.');}
 }

function onEdit(e){

  var roster = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Match Tool");
  var autosort = roster.getRange(6, 13).getValue();
  var range1 = roster.getRange("B10:K59");
  var range2 = roster.getRange("N10:W59");

 //  if('B3' === GWL) {
//     SpreadsheetApp.getActiveSheet().getRange('K2').setValue('40');          
//   }

   // test if K2 (war size) was modified
  if (e.source.getActiveSheet().getName() == "Match Tool" && e.range.rowStart === 6 && e.range.columnStart === 13) {
    moveToSub();
  }
  //preform autosort if on
  if ( autosort == "On" ){
  range1.sort( [{ column : 7, ascending: false}, { column : 11, ascending: false}] );
  range2.sort( [{ column : 19, ascending: false}, { column : 23, ascending: false}] );
  }  
  }

Я ожидаю, что игроки будут отсортированы по убыванию столбца 7 (столбец G), а затем по убыванию столбца 11 (столбец K). То, что я получаю, это то, что некоторые игроки не отсортированы правильно.
Я получаю - 132, 131, 131, 113, 111, 132 , 113 , 90, 88, 87, 86.
Я должен видеть - 132 , 132, 131, 131, 113 , 113, 111, 90, 88, 87, 86.

Спасибо, что нашли время, чтобы помочь мне.

1 Ответ

0 голосов
/ 24 января 2019

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

Итак, мораль этой истории в том, чтобы убедиться, что сортируемые данные относятся к одному и тому же типу.

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