Google 用于列出所有 Google 课堂课程并将它们放入 Google 电子表格中的 Apps 脚本

Google Apps Script to list all Google Classroom courses and put them in a Google Spreadsheet

我正在尝试创建一个 Google Apps 脚本,它将列出所有 Google Class 活动和存档的房间课程,以及 ID、NAME、SECTION、和课程状态。一切正常,除了我不知道如何修复 .getRange 以便它将所有信息放在 Google 电子表格中。我得到的错误是 "Incorrect range height, was 4 but should be 10"。如果我将 .getRange 简单地设置为 "A1:D1",它将覆盖每个 Class 的内容,直到脚本完成,所以我知道脚本的其余部分有效,但我不知道如何放置范围,以便可以列出所有 Classes。我现在所拥有的是:

function listCourses() {
var response = Classroom.Courses.list();
var courses = response.courses;
 if (courses && courses.length > 0) {
  for (i = 0; i < courses.length; i++) {
   var course = courses[i];
   var ids = course.id;
   var title = course.name;
   var sec = course.section;
   var state = course.courseState; 
   var arr1 = [];
   arr1.push(ids,title,sec,state); 
   var arr2 = [];
   while(arr1.length) arr2.push(arr1.splice(0,1));

var s = SpreadsheetApp.getActiveSpreadsheet();
var sh = s.getSheetByName('LISTS');

  for (var x=0; x<arr2.length; x++){   
  var newRow = sh.getLastRow() + 1; 

// Here in the .getRange is where it gives me the error. A new row should be added for each Class until all the Classes (with the information mentioned above) are listed. 

  sh.getRange(1, 1, newRow, arr2[0].length).setValues(arr2);   
  }

}}}

杰森。您可以使用追加行绕过范围问题。然而,这将意味着操纵数据,以便每个 class 的详细信息都在一行中。我更喜欢这种方法,因为它容易出错。它还会自动查找 sheet 中的下一个空行,因此您无需获取最后一行。

function appendRow() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getSheetByName('Sheet1');

  // Try is added to catch failures on automated scripts
  try {
    sheet.appendRow(['cell1','cell2','cell3'])
  } catch (e){
    Logger.log(e)
    // Could send an email here to alert script failure
  }
  // In a loop
  var data = [['row 1 cell 1','row 1 cell 2'],['row 2 cell 1','row 2 cell 2 ']]
  data.forEach(function(item){
    sheet.appendRow(item)
  })
}

尝试这样的事情: 我不经常使用 Classroom API,而且我只有一个 class,但这对它有用。

function listCourses() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sh = ss.getSheetByName('LISTS');
  var response = Classroom.Courses.list();
  var courses = response.courses;
  var arr=[];//You could put column headers in here
  for (i = 0; i < courses.length; i++) {
    var course = courses[i];
    var ids = course.id;
    var title = course.name;
    var sec = course.section;
    var state = course.courseState;  
    arr.push([title,sec,state]); //you could also go sh.appendRow([title,sec,state]); here if you wish and avoid the use of the two dimensional array all together as suggested in the other answer.
  }
  sh.getRange(1, 1, arr.length, arr[0].length).setValues(arr);   
}