Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 应用程序脚本错误-排序范围必须包括表单上的所有列_Javascript_Google Apps Script_Google Docs - Fatal编程技术网

Javascript 应用程序脚本错误-排序范围必须包括表单上的所有列

Javascript 应用程序脚本错误-排序范围必须包括表单上的所有列,javascript,google-apps-script,google-docs,Javascript,Google Apps Script,Google Docs,尝试根据第一列“时间戳”对电子表格进行排序。运行下面的脚本后,返回“排序范围必须包括表单上的所有列”错误。工作表中有A-S列。A-O列包含表单数据,P-S列包含人工输入 function sortForm() { var ss = SpreadsheetApp.getActiveSpreadsheet(); // Change to the "form responses" spreadsheet var sheet = ss.getSheetByName("Form Respon

尝试根据第一列“时间戳”对电子表格进行排序。运行下面的脚本后,返回“排序范围必须包括表单上的所有列”错误。工作表中有A-S列。A-O列包含表单数据,P-S列包含人工输入

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

}

什么可能导致此错误?

遇到了相同的错误。尝试了所有的方法,但几个小时后,重新创建了电子表格,它成功了。 似乎有些电子表格被所有这些检查损坏了谷歌电子表格的新面貌。
所以,只需重新创建电子表格并读取所有脚本。

遇到相同的错误。尝试了所有的方法,但几个小时后,重新创建了电子表格,它成功了。 似乎有些电子表格被所有这些检查损坏了谷歌电子表格的新面貌。
因此,只要尝试重新创建电子表格并读取所有脚本即可。

新的谷歌表格提供了一种新的电子表格排序方法:

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

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

新的Google sheets提供了一种对电子表格进行排序的新方法:

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

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

我有同样的错误,并创建了一个新的工作表和表格

使用代码

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);
}
显然,这只适用于整个工作表。我在标题行中设置了名称,以便它们不会被移动


我通过

找到了这个解决方案。我也有同样的错误,并创建了一个新的工作表和表单

使用代码

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);
}
显然,这只适用于整个工作表。我在标题行中设置了名称,以便它们不会被移动


我通过

+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)
    ...

+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)
    ...

如果该字段是Google Forms响应的一部分,则不允许通过Google电子表格自己的排序菜单进行排序。如果该字段是Google Forms响应的一部分,则不允许通过Google电子表格自己的排序菜单进行排序。