Google 课堂 - 列出所有课程

问题描述 投票:0回答:2

我有一个函数可以列出我所有的 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);   
    }

谢谢

google-apps-script google-sheets google-classroom
2个回答
1
投票

根据您的情况,使用

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

参考:


0
投票

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
}

© www.soinside.com 2019 - 2024. All rights reserved.