这个公式是否有解决方案来停止AutoSort脚本

时间:2019-01-13 00:30:56

标签: sorting google-apps-script google-sheets google-sheets-formula

我在开发项目时尝试学习脚本,因此,如果我提出的问题不正确,请原谅我。

我为Google表格文档创建了自动排序脚本,以按“体重”对球员列表进行排序。在添加以下公式之前,它工作正常。添加此公式后,我的数据将按第7列进行排序,从大到小并且不完全。奇怪的是,出现故障的球员被列为替补球员。

此工作表的工作方式。
在“比赛工具”选项卡中,可以从“数据验证”单元格中选择球员。
数据验证列表来自MR1选项卡。
MR1选项卡根据MRTool中定义的导入范围获取列表。

这来自一个较大的文档,我提取了一些重要部分以使错误发生。我试图运行仅文本和AutoSort脚本的准系统,并且可以正确排序。我还尝试过更改AutoSort进入的列,并且它可以正常工作。

停止脚本运行的公式:

=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 :(得分:0)

在朋友的帮助下,我们意识到问题与该页面上的脚本无关,这是如何在导入数据的表上输入数据的。一些数字作为数字输入,而另一些数字作为文本输入。通过将文本更改为数字,脚本可以按预期执行。

所以故事的寓意是,请确保要排序的数据属于同一类型。