0
votes

I have a "leaderboard"/"scoreboard", across four sheets, that I need to have auto sorting whenever updated by first Total Score (column 2) and then Total Kills (column 3). These columns are the same across all four sheets.

I've used a very simple script in the past when the scoreboard was limited to one sheet, but I have since expanded it to have Top Ten, Top Four, and Top Two on separate sheets within the same document.

The problem I'm running into: When the script updates one sheet, the other ones seem to flat out stop working entirely; in other words, the script breaks.

Can I please get some advice? I've tried several scripts already from this site, and the basic one I see some success with (but then the script seemingly breaks?) is below.

  function sortOnEdit(e) {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("MAIN EVENT");
  sheet.sort(3, false).sort(2, false);
}

function sortOnEdit(e) {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("TOP TEN");
  sheet.sort(3, false).sort(2, false);
}

function sortOnEdit(e) {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("TOP FOUR");
  sheet.sort(3, false).sort(2, false);
}

function sortOnEdit(e) {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("TOP TWO");
  sheet.sort(3, false).sort(2, false);
}

Ideally, when functioning, the sheets will literally just sort themselves by the Total Score column, with Total Kills being the "tiebreaker" for sorting.

I've included a copy of my sheet if anybody could help:

https://docs.google.com/spreadsheets/d/1a6XGv09TPt5Vnxqfcd1Xba3TGMis5OelGxlvzNDl5CY/edit?usp=sharing

2

2 Answers

0
votes

try something like this instead of your scripts:

function onEdit(event){
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = event.source.getActiveSheet().getName()
  var editedCell = event.range.getSheet().getActiveCell();
if(sheet=="Sheet1"){
  var columnToSortBy = 2;
  var tableRange = "A3:C10"; //range to be sorted
  if(editedCell.getColumn() == columnToSortBy){   
    var range = ss.getActiveSheet().getRange(tableRange); 
    range.sort( { column : columnToSortBy, ascending: true } );
  }}
  else if(sheet=="Sheet2"){
    var columnToSortBy = 7;
    var tableRange = "A3:C10"; //range to be sorted
  if(editedCell.getColumn() == columnToSortBy){   
     var range = ss.getActiveSheet().getRange(tableRange); 
    range.sort( { column : columnToSortBy, ascending: true } );
  }
  else{return}
}}
0
votes

try this:

function sortOnEdit(e) {
  var sh=e.range.getSheet();
  var name=sh.getName();
  var incl=['MAIN EVENT','TOP TEN','TOP FOUR','TOP TWO'];
  if(incl.indexOf(name)==-1) return;
  sh.sort(3,false).sort(2,false);
}