在编辑时对Google电子表格进行排序

时间:2016-05-11 06:51:17

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

我正在寻找一种对电子表格进行排序的方法。我环顾四周,找到了#34;编辑"功能,但我不完全确定如何使用它。它如何与谷歌脚本仅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列时对其进行排序吗?

关心Jonny

编辑:最后我选择了我的slighlty修改版,因为onEdit毕竟不适合这种情况。

2 个答案:

答案 0 :(得分:0)

是的,升序是按字母顺序排列的。此代码仅查找名为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});
 }}}

答案 1 :(得分:0)

简单事件触发器的执行时间限制为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
  }
}

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