在Edit()上排序某个范围

时间:2016-09-29 14:08:26

标签: google-apps-script google-sheets

我正在尝试自动对我的工作表onEdit的某个范围进行排序,其方式是顶部是空单元格,而底部是最旧的​​条目。 我从here获得了此代码,并尝试根据我的需要对其进行修改:

function onEdit(e)
{
  var sheet = ss.getActiveSheet();
   if( sheet != ss.getSheetByName('cover sheet'))
   {
      var editRange = { // B4:J6
         top: 29,
         bottom: sheet.getLastRow()+1,
         left: 4,
         right: 11
      };
      // Exit if we're out of range
      var thisRow = e.range.getRow();
      if (thisRow < editRange.top || thisRow > editRange.bottom) return;

      var thisCol = e.range.getColumn();
      if (thisCol < editRange.left || thisCol > editRange.right) return;

      // We're in range; timestamp the edit
      var ss = e.range.getSheet();
      ss.getRange(editRange).sort({column: 1, ascending: true});
   }
}

但这不起作用。有任何想法吗?以下是sample sheet的链接。

此致

2 个答案:

答案 0 :(得分:0)

那么,

你需要的东西应该是这样的:

function onEdit(e) {
  var thisSS = e.source,
      editedRow = e.range.getRow(),
      editedCol = e.range.getColumn();

  if(editedCol === 4){
    thisSS.sort(editedCol, false);
  }
  thisSS.insertRowBefore(2);
}

然后将其粘贴到您的工作表脚本中,然后转到&#34;资源&gt;&gt;当前项目的触发器&#34;并设置触发器以运行函数&#34; onEdit&#34;当onEdit事件发生时。

最好的问候。

答案 1 :(得分:0)

请确保您声明的范围中有单元格。正如@ SO question中@ SpiderPig所提到的,如果给定范围内没有单元格,则范围将无效。

为此,您也可以尝试使用bottom: sheet.getLastRow() -1,例如给出的解决方案:

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

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

希望对你有用。快乐的编码!