我有一个函数可以列出我所有的 google 类,但它只返回 500 个结果,我如何实现分页以生成完整的列表?
function listCourses() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sh = ss.getSheetByName('Classes');
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;
var guardian = course.guardiansEnabled;
arr.push([ids,title,state,guardian]);
}
sh.getRange(2, 1, arr.length, arr[0].length).setValues(arr);
}
谢谢
根据您的情况,使用
pageToken
怎么样?当你的脚本修改后,就会变成如下所示。
function listCourses() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sh = ss.getSheetByName('Classes');
var arr = [];
var pageToken = "";
do {
var response = Classroom.Courses.list({pageToken});
var courses = response.courses;
arr = arr.concat(courses.map(({id, name, section, courseState, guardiansEnabled}) => [id, name, section, courseState, guardiansEnabled]));
pageToken = response.nextPageToken;
} while (pageToken);
sh.getRange(2, 1, arr.length, arr[0].length).setValues(arr);
}
function listAllCourses() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheetByName('Courses List') || ss.insertSheet('Courses List'); // Get the sheet by name or create a new one
sheet.clearContents(); // Clear previous data
sheet.appendRow(['Course ID', 'Course Name', 'Course Section']); // Headers
var optionalArgs = {
pageSize: 100 // You can set the number of courses retrieved per API call (max is 1000)
};
var pageToken;
do {
try {
var response = Classroom.Courses.list(optionalArgs);
var courses = response.courses;
if (courses && courses.length > 0) {
for (var i = 0; i < courses.length; i++) {
var courseId = courses[i].id;
var courseName = courses[i].name;
var courseSection = courses[i].section || 'N/A'; // Some courses might not have a section, so we default to 'N/A'
sheet.appendRow([courseId, courseName, courseSection]);
}
} else {
Logger.log('No courses found.');
}
pageToken = response.nextPageToken;
if (pageToken) {
optionalArgs.pageToken = pageToken; // Set the next page token to retrieve the next page of results
}
} catch (error) {
Logger.log('An error occurred: ' + error);
}
} while (pageToken); // Continue until there's no more page token
}