Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save Tomokatsu-Sakamoto/0ef21abde3d9a0e9e35a53d9858bd1dd to your computer and use it in GitHub Desktop.
Save Tomokatsu-Sakamoto/0ef21abde3d9a0e9e35a53d9858bd1dd to your computer and use it in GitHub Desktop.
'use strict'
//----------------------------------------------------------------------------
// チェック結果をクリア(列 A~F)
function checkClear( ) {
SpreadsheetApp.getActiveSheet().getRange( 'A:F' ).clearContent( );
SpreadsheetApp.getActiveSheet().getRange( 'G1' ).clearContent( );
}
/********************************************************************************
* クラスの一覧を作成する
*/
function ListAllCourses( ) {
const sheet = SpreadsheetApp.getActiveSheet( ); // アクティブなシートを取得
var pageToken = null; // 一度に読み込めなかったときにための pageToken
var iCount = 0; // クラスの総数
var iStudent = 0; // 登録されている生徒の総数(延べ数)
var i;
//------------------------------------------------------------
// クラス探索のメインループ
do {
var optionalArgs = {
courseStates: 'ACTIVE', // 探索の対象は現在使われているクラスに限る
pageToken: pageToken // 一度に読み込めなかったときは pageToken を指定
};
var response = Classroom.Courses.list( optionalArgs );
var courses = response.courses;
Logger.log( "Class : %s", courses.length );
// 今回の一覧の分を個別に、スプレッドシートに書き込む
for ( i = 0 ; i < courses.length ; i++ ) {
var course = courses[ i ];
// console.log( '%s (%s)', course.name, course.id );
sheet.getRange( 1 + iCount + i, 1 ).setValue( course.id ); // クラスの ID
sheet.getRange( 1 + iCount + i, 2 ).setValue( course.name ); // クラスの名称
sheet.getRange( 1 + iCount + i, 3 ).setValue( course.courseState );
}
iCount += courses.length;
Logger.log( "Class SUM : %s", iCount );
pageToken = response.nextPageToken; // 前回の続きから読み込むように、pageToken を設定
} while ( pageToken != null ); // pageToken が null なら、次はない
sheet.getRange( 1 + iCount + 1, 2 ).setValue( iCount );
}
/********************************************************************************
* クラスに所属する生徒の数を数える(親関数)
*/
function CourseStudents( ) {
const sheet = SpreadsheetApp.getActiveSheet( ); // アクティブなシートを取得
var iCount = 0; // クラスの総数
var iStudent = 0; // 登録されている生徒の総数(延べ数)
var courseId; // クラスの ID
var i = 0;
i = sheet.getRange( 'G1' ).getValue( );
do {
// A列に設定されているクラスの ID に対して処理する
i++;
courseId = sheet.getRange( i, 1 ).getValue( );
if ( courseId > 0 ) {
var courses = Classroom.Courses.get( courseId );
sheet.getRange( i, 4 ).setValue( Classroom.UserProfiles.get(courses.ownerId).emailAddress );
sheet.getRange( i, 5 ).setValue( courses.enrollmentCode );
iCount = countCourseStudents( courseId );
sheet.getRange( i, 6 ).setValue( iCount );
}
Logger.log( i + " : " + courseId + " - " + iCount );
} while ( courseId > 0 );
}
/********************************************************************************
* クラスに所属する生徒の数を数える
*/
function countCourseStudents( courseId ) {
var pageToken = null; // 一度に読み込めなかったときにための pageToken
var iTotal = 0; // 登録されている生徒の数
var i;
var j;
//------------------------------------------------------------
// 生徒探索のメインループ
do {
var optionalArgs = {
pageToken: pageToken // 一度に読み込めなかったときは pageToken を指定
};
var response = Classroom.Courses.Students.list( courseId, optionalArgs );
if ( response.students ) {
//
iTotal += response.students.length;
Logger.log( "Student SUM : %s", iTotal );
pageToken = response.nextPageToken;
}
else {
//
pageToken = null;
}
} while ( pageToken != null );
return iTotal;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment