2016-09-29 34 views
0

排序一定範圍我試圖自動排序我的工作表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

問候

+0

它怎麼樣?你能提供一個樣本,以顯示它能做什麼以及應該怎麼做? –

+0

如果工作表不是封面,它應該對工作表中的特定行進行排序。它什麼也沒做。我將創建一個樣本電子表格 – Jonnyboy

+0

嘗試使用某個Logger.log('some text here:'+ variableName)'語句在代碼編輯器中運行該函數,然後查看LOGS以查看它打印到日誌的內容。例如。將'Logger.log('it ran!')'放在函數的最頂部,以確定函數是否正在運行。將第一個if語句改爲:if(sheet.getName()==='cover sheet')' –

回答

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

然後將其粘貼到您的工作表的劇本,然後進入「資源>>當前項目的觸發器」和設置運行功能觸發「onEdit」的onEdit事件occour時。

此致敬意。

+0

不幸的是我需要插入行的另一種解決方案,因爲在這個區域的左側是一個不應該改變的區域。 – Jonnyboy

+0

此外,排序不應該離開框的邊界,但要在框內排序。 – Jonnyboy

0

請確保您聲明的範圍內有單元格。正如@SpiderPig在SO question中所提到的,如果給定範圍內沒有單元格,則範圍將無效。

對於這一點,你也可以嘗試使用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}); 
    }); 
} 

希望對你有用。快樂的編碼!

+0

我對運行時間有點擔心:如果我看到它,它總是會對該區域中的所有工作表進行排序,即使該區域沒有進行更改也是如此。從技術上來說,如果在該區域進行編輯或者我錯了,只對已編輯的工作表進行排序就足夠了? – Jonnyboy