【问题标题】:Sorting Google Spreadsheet on edit在编辑时对 Google 电子表格进行排序
【发布时间】:2016-09-06 09:50:18
【问题描述】:

我正在寻找一种对我的电子表格进行排序的方法。我环顾四周,发现了“编辑时”功能,但我不完全确定如何使用它。谷歌脚本只有 5 分钟的运行时间,它是如何工作的,cellchange 是否充当触发器? 我找到了以下代码:

function AutoSortOnEdit() {
  var sheetNames = ["testsheet456", "testsheet457", "testsheet458"];

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  sheetNames.forEach(function(name) {
    var sheet = ss.getSheetByName(name);
    var range = sheet.getRange(5, 1, sheet.getLastRow() - 1, sheet.getLastColumn());
    range.sort({column: 1, ascending: true});
  });

我个人会使用这个稍微修改过的版本:

function AutoSortOnEdit() {

    var sheet = SpreadsheetApp.openById("...").getSheetByName("...");
    var range = sheet.getRange(5, 1, sheet.getLastRow() - 1, sheet.getLastColumn());
    range.sort({column: 1, ascending: true});
  });

现在我想按第一行排序的字母顺序对工作表进行排序。 我的问题是:

  • “升序”是否意味着按字母顺序排序?
  • 空单元格位于何处(显然它们应该在末尾)?
  • 每次更改都会触发它吗?我可以仅在 A 列被编辑时对其进行排序吗?

问候乔尼

编辑:最后我选择了稍微修改过的版本,因为 onEdit 根本不适合这种情况。

【问题讨论】:

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


    【解决方案1】:

    是的,升序是按字母顺序排列的。此代码仅在名为 Sheet1 的工作表和 A 列中查找更改。该函数必须命名为 OnEdit(而不是 AutoSortOnEdit)。

    function onEdit()
    {
      var sheet = SpreadsheetApp.getActiveSpreadsheet();
      var sheetName= sheet.getSheetName();
      if(sheetName=="Sheet1"){ //sheet to run on edit
      var editRange = sheet.getActiveRange();
      var editRow = editRange.getRow();
      var editCol = editRange.getColumn();
      var lr = sheet.getLastRow()
      var range = sheet.getRange("A1:A"+lr);//apply on edit to
      var rangeRowStart = range.getRow();
      var rangeRowEnd = rangeRowStart + range.getHeight()-1;
      var rangeColStart = range.getColumn();
      var rangeColEnd = rangeColStart + range.getWidth()-1;
      if (editRow >= rangeRowStart && editRow <= rangeRowEnd 
          && editCol >= rangeColStart && editCol <= rangeColEnd)
      {
      var range = sheet.getSheetByName(sheetName).getRange(2, 1, sheet.getLastRow() - 1, sheet.getLastColumn());//Assumes header row
        range.sort({column: 1, ascending: true});
     }}}
    

    【讨论】:

      【解决方案2】:

      简单事件触发器的执行时间限制为 30 秒。

      onEdit() events 必须简单命名为 onEdit() 或 onEdit(event)

      onEdit 可以采用一个变量来表示触发它的event,其中包括被编辑的范围。

      工作表有自己的sort()。如果您尝试对整个工作表进行排序,则使用它更简单。

      function onEdit(event){
        if(event.range.getSheet().getName() == "Sheet1" && event.range.getColumn() == 1){//checks to see if the edited range was both on Sheet1 and column 1 (A)
          event.range.getSheet().sort(1,true); //sort by first column
         // event.range.getSheet().sort(1,false); //decending
        }
      }
      

      可以通过扩展条件或附加 if 语句来查看多个工作表。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-07-31
        • 1970-01-01
        • 2017-09-18
        • 1970-01-01
        • 2023-03-09
        • 1970-01-01
        • 1970-01-01
        • 2016-09-11
        相关资源
        最近更新 更多