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