2014-02-17 23 views
1

嘗試基於第一列「時間戳」對電子表格進行排序。在運行下面的腳本之後,返回「排序範圍必須包含表單中的所有列」錯誤。表格中有A-S列。列A-O包含具有包含人類輸入的列P-S的表格數據。Apps腳本錯誤 - 排序範圍必須包括表單上的所有列

function sortForm() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 

    // Change to the "form responses" spreadsheet 
    var sheet = ss.getSheetByName("Form Responses"); 
    var lastCol = 19 
    var lastRow = sheet.getLastRow(); 

    // Get range 
    var r = sheet.getRange(2, 1, sheet.getMaxRows() -1, lastCol); 

    // Sort the range 
    r.sort([{column: 1, ascending: false}]); 

} 

什麼可能導致此錯誤?

回答

0

遇到同樣的錯誤。嘗試了一切,但幾個小時後只是重新創建電子表格,它的工作。
似乎一些電子表格被損壞了所有這些「檢查谷歌電子表格的新外觀」。
所以,只要嘗試重新創建電子表格並讀取所有腳本。

1

新的谷歌片提供了電子表格排序的新方法:

function sortSheet() { 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 

    // Change to the "form responses" spreadsheet 
    var sheet = ss.getSheetByName("Requests"); 
    sheet.sort(1, false); 
} 
0

我有同樣的錯誤,並創建了一個新的與形式。

使用的代碼

function sortmysheet() { 
    var sheet  = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1"); 
    var lastColumn = sheet.getMaxColumns(); // the last column of the sheet 
    var lastRow = sheet.getMaxRows();  // Returns the position of the last row 

    var range = sheet.getRange(1, 1, lastRow, lastColumn); 
    range.sort([2,1]); 
} 

我包括在該範圍整個片材,你可以看到。

我也嘗試了包含有限行但最大列的部分。試圖刪除除A,B之外的所有列。試圖用數字設置範圍。

這工作在沒有附加到窗體的工作表上,但我在窗體鏈接工作表上得到相同的錯誤。

如果我取消鏈接表單,該腳本將起作用。

但是,我發現了一個解決方案,在某些情況下工作。

儘管在文檔中沒有描述這種方式,但您可以鏈接sheet.sort()函數。

所以我用

function sortmysheet() { 
    var sheet  = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1"); 
    sheet.sort(2, false).sort(1, true); 
} 

顯然,這將只是整個工作表上工作。我在我的標題行中設置名稱,以便它們不會被移動。

我發現通過Matthew Taylor

3

+1 @nah_ny這個解決方案 - 我有同樣的問題,而且看起來,谷歌電子表格的新版本不容許範圍排序,如果該範圍是在谷歌形成響應表:

// not working 
function sort_form_responses() { 
    // get spreadsheet 
    var sa = SpreadsheetApp.getActiveSpreadsheet(); 
    // get forms response sheet by name 
    var sn = sa.getSheetByName("Form Responses 2"); 
    // get sheet range, assumes headers in row 1 
    var r = sn.getRange(2, 1, sn.getMaxRows()-1, sn.getMaxColumns()); 
    // sort range array 
    r.sort([{ column: 2, ascending: false }]); 
    ... 

,在我的情況下工作中的溶液中,而不是使用的排序方法的整個響應片狀物體上:

// working 
function sort_form_responses() { 
    // get spreadsheet 
    var sa = SpreadsheetApp.getActiveSpreadsheet(); 
    // get forms response sheet by name 
    var sn = sa.getSheetByName("Form Responses 2"); 
    // sort entire sheet required for form sheets 
    sn.sort(2,false) 
    ... 
+0

這是真實的,它並沒有如果該字段是Google表單響應的一部分,則即使通過Google電子表格自己的排序菜單也不允許排序。 –

相關問題