2016-05-11 252 views
0

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

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被编辑时进行排序吗?

问候强尼

编辑:到底我和我slighlty修改后的版本,因为onEdit是毕竟不是在形势配件。

回答

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

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

onEdit() events必须命名为简单地onEdit()或onEdit(事件)

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语句来观察多张表。

相关问题