2014-02-17 21 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电子表格自己的排序菜单也不允许排序。 –

相关问题