【问题标题】:A simple sort script on Google Sheets is not workingGoogle 表格上的简单排序脚本不起作用
【发布时间】:2019-05-09 21:09:40
【问题描述】:

我有一个“排行榜”/“记分牌”,跨越四张纸,每当更新第一个总得分(第 2 列)和总击杀数(第 3 列)时,我都需要自动排序。这些列在所有四张纸上都是相同的。

过去,当记分板限制在一张纸上时,我使用了一个非常简单的脚本,但后来我将其扩展为在同一文档中的不同纸上分别显示前十名、前四名和前两名。

我遇到的问题:当脚本更新一个工作表时,其他工作表似乎完全停止工作;换句话说,脚本会中断。

我能得到一些建议吗?我已经从这个站点尝试了几个脚本,我看到一些成功的基本脚本(但脚本似乎坏了?)如下。

  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);
}

理想情况下,在运行时,表格实际上只是按总分列对自己进行排序,总击杀数是排序的“决胜局”。

如果有人可以提供帮助,我已附上我的工作表副本:

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

【问题讨论】:

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


    【解决方案1】:

    试试这样的东西,而不是你的脚本:

    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}
    }}
    

    【讨论】:

    • 我确实看到它成功地对第一张表进行了排序,但是当我为其他三个脚本中的每一个复制脚本时,它就不再起作用了
    • 有什么建议吗?我对此很陌生,您的脚本适用于第一张纸。然后,我为每个附加工作表重新创建了它,这与我在脚本中遇到的问题相同。它似乎只在我第一次使用时才识别出一张纸,一旦我换了一张纸并返回它就不再起作用了
    • 变量重复是否有问题?
    【解决方案2】:

    试试这个:

    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);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多