You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何修改Google Classroom脚本以列出班级全部学生(而非仅前30名)

解决Google Classroom脚本无法列出全部学生的问题

嘿,我帮你搞定这个问题啦!你的脚本只能拿到前30名学生,是因为Google Classroom的API默认每次最多返回30条结果,想要获取全部学生,咱们得处理分页请求——也就是用pageToken参数循环拉取数据,直到没有更多内容为止。

首先,先确认你已经在脚本编辑器里开启了Google Classroom API:点击顶部菜单的「扩展程序」→「Apps脚本」,然后在脚本编辑器里点「服务」→「添加服务」,找到「Classroom API」并启用它。

接下来是修改后的完整脚本,我加了详细注释,方便你理解:

function listAllClassroomStudents() {
  // 获取当前表格和指定工作表
  const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  const sheet = spreadsheet.getSheetByName('CLASS');
  if (!sheet) {
    SpreadsheetApp.getUi().alert('找不到名为"CLASS"的工作表,请检查名称是否正确!');
    return;
  }

  // 清空工作表原有数据(保留表头,如果你有表头的话)
  // 如果你不需要清空,可以注释掉下面这行
  sheet.clearContents();

  // 替换成你的班级ID(可以从Google Classroom班级页面的URL里找到,比如https://classroom.google.com/c/XXXXXXXXX,后面的XXXXXXXXX就是班级ID)
  const courseId = "你的班级ID";
  
  let allStudents = [];
  let pageToken = null;

  // 循环请求所有分页数据
  do {
    // 构造请求参数,包含当前页的token
    const options = {
      pageToken: pageToken,
      pageSize: 100 // 每次最多请求100条(API允许的最大值),比默认30条效率更高
    };

    // 请求班级学生列表
    const response = Classroom.Courses.Students.list(courseId, options);
    // 如果当前页有学生,添加到总列表里
    if (response.students) {
      allStudents = allStudents.concat(response.students);
    }

    // 更新pageToken,准备请求下一页
    pageToken = response.nextPageToken;
  } while (pageToken); // 只要还有下一页token,就继续循环

  // 把学生数据整理成适合写入表格的格式
  const studentData = allStudents.map(student => [
    student.profile.name.fullName,
    student.profile.emailAddress,
    student.userId
    // 你可以根据需要添加更多字段,比如学生的头像URL等
  ]);

  // 如果有表头的话,先写入表头,比如:
  // sheet.appendRow(['姓名', '邮箱', '用户ID']);

  // 把所有学生数据写入工作表
  if (studentData.length > 0) {
    sheet.getRange(1, 1, studentData.length, studentData[0].length).setValues(studentData);
  }

  SpreadsheetApp.getUi().alert(`成功获取到${allStudents.length}名学生的数据!`);
}

关键说明:

  • 分页处理:用do-while循环,每次请求后获取nextPageToken,直到这个token为空,就说明已经拿到了所有学生。
  • pageSize优化:我把每次请求的最大条数设为100(API允许的最大值),这样比默认的30条能减少请求次数,效率更高。
  • 数据写入:先把所有学生数据整合到一个数组里,再一次性写入表格,比逐行写入更高效。

记得把代码里的"你的班级ID"替换成你实际的班级ID哦,班级ID可以从Google Classroom的班级页面URL里提取——比如URL是https://classroom.google.com/c/1234567890,那1234567890就是你的班级ID。

内容的提问来源于stack exchange,提问作者Jason Jurotich

火山引擎 最新活动