【问题标题】:Is there a solution to this formula stopping an AutoSort script这个公式是否有解决方案停止自动排序脚本
【发布时间】:2019-06-07 11:22:05
【问题描述】:

我正在尝试在开发项目时学习脚本,所以如果我问错了这个问题,请原谅我。

我为 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、132113、90、88、87、86。
我应该看到 - 132、132、131、131、113、113、111、90、88、87、86。

感谢您花时间帮助我。

【问题讨论】:

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


    【解决方案1】:

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

    所以这个故事的寓意是,检查以确保被排序的数据属于同一类型。

    【讨论】:

      猜你喜欢
      • 2012-07-14
      • 2011-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-09
      • 2019-01-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多