2016-05-11 284 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語句來觀察多張表。

相關問題