Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/377.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 Sheets - Fatal编程技术网

Javascript 在使用应用程序脚本将其作为附件发送到电子邮件之前,尝试排序和删除几列,但显示错误?

Javascript 在使用应用程序脚本将其作为附件发送到电子邮件之前,尝试排序和删除几列,但显示错误?,javascript,google-apps-script,google-sheets,Javascript,Google Apps Script,Google Sheets,我正在发送一个谷歌表单标签给学生,它运行良好。但在发送给他们之前,我需要使用Column3值对工作表进行排序,然后删除column2、column4、column5、column7。但它显示出错误: TypeError:比较函数必须是函数或 代码中的contents.sort和contents.delete未定义 下面 我看了很多帖子,但没能找出问题所在 Function sendEmails(){ var sss = SpreadsheetApp.getActiveSpreadsheet(

我正在发送一个谷歌表单标签给学生,它运行良好。但在发送给他们之前,我需要使用Column3值对工作表进行排序,然后删除column2、column4、column5、column7。但它显示出错误:

TypeError:比较函数必须是函数或 代码中的contents.sort和contents.delete未定义 下面

我看了很多帖子,但没能找出问题所在

Function sendEmails(){
  var sss = SpreadsheetApp.getActiveSpreadsheet();
  var ssID = sss.getId();
  var sheetName = sss.getName(); 
  var sh = SpreadsheetApp.getActive();
  var sheet1 = sh.getSheetByName("TempDataSet");
  var shID = sheet1.getSheetId().toString();
 
  var subject = 'Your Attendance Record at BDU';
  var body = 'Dear Student,'+ '\n\n' + 'Greetings! Please find the attendance record attached for your reference.' + '\n\n' + 'Thank you.';
  
  var requestData = {"method": "GET", "headers":{"Authorization":"Bearer "+ScriptApp.getOAuthToken()}};  
  var url = "https://docs.google.com/spreadsheets/d/"+ ssID + "/export?format=xlsx&id="+ssID+"&gid="+shID;

  var result = UrlFetchApp.fetch(url , requestData);  
  var contents = result.getContent();
  var column = 3;
  contents.sort({column: column, ascending:true});
  contents.delete({column: column2, column4, column5, column7});
           
  var sheet2 = sh.getSheetByName('StudentList');  
  var data = sheet2.getLastRow();
  var students = [];
  var students = sheet2.getRange(2, 6, data).getValues();  
  
  for (var i=0; i<students.length; i++){ // you are looping through rows and selecting the 1st and only column index
    if (students[i][0] !== ''){           
      MailApp.sendEmail(students[i][0].toString(), subject ,body, {attachments:[{fileName:sheetName+".xlsx", content:contents, mimeType:"application//xlsx"}]});     
    } 
  }
}
说明: 我的建议是只创建TempDataSet工作表的副本,并在该工作表上执行所有排序和删除列操作:

  var sh = SpreadsheetApp.getActive();
  var sheet = sh.getSheetByName("TempDataSet");
  var sheet1 = sheet.copyTo(sh).setName('TempDataSet_temp');
  var shID = sheet1.getSheetId().toString();
  sheet1.getRange(2, 1, sheet.getLastRow() -1, sheet.getLastColumn()).sort({column: 3, ascending: true}); 
  var columns_delete = [7,5,4,2];
  columns_delete.forEach(col=>sheet1.deleteColumn(col));
然后,在结果变量中保存临时工作表后,可以将其删除:

sh.deleteSheet(sh.getSheetByName('TempDataSet_temp'))
解决方案: 说明: 我的建议是只创建TempDataSet工作表的副本,并在该工作表上执行所有排序和删除列操作:

  var sh = SpreadsheetApp.getActive();
  var sheet = sh.getSheetByName("TempDataSet");
  var sheet1 = sheet.copyTo(sh).setName('TempDataSet_temp');
  var shID = sheet1.getSheetId().toString();
  sheet1.getRange(2, 1, sheet.getLastRow() -1, sheet.getLastColumn()).sort({column: 3, ascending: true}); 
  var columns_delete = [7,5,4,2];
  columns_delete.forEach(col=>sheet1.deleteColumn(col));
然后,在结果变量中保存临时工作表后,可以将其删除:

sh.deleteSheet(sh.getSheetByName('TempDataSet_temp'))
解决方案:
排序函数的形式仅适用于范围排序函数的形式仅适用于范围注释不用于扩展讨论;此对话已结束。评论不用于扩展讨论;这段对话已经结束。