Created
May 22, 2021 23:22
-
-
Save Tomokatsu-Sakamoto/a844082c06233c3bb972f13259ade72d to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
'use strict' | |
const startLine = 7; // 参加しているクラスの一覧を表示しはじめる行 | |
const startMail = 2; // 参加しているクラスの一覧を表示しはじめる行 | |
/******************************************************************************** | |
* 参加しているクラスの一覧を一覧にするセルをクリアする | |
* → セル「A3」を基準に、先頭のセルに何か入力されていればクリアしていく | |
*/ | |
function clearCells( ) { | |
var i; | |
var j; | |
const sheet = SpreadsheetApp.getActiveSheet( ); // アクティブなシートを取得 | |
for ( i = startLine ; ; i++ ) { | |
if ( sheet.getRange( i, 1 ).getValue() == "" ) { | |
/* もうクリアされている | |
* → 先頭に何も入力されていなければ、クリア終了 | |
*/ | |
break; | |
} | |
else { | |
/* まだクリアしなきゃいけない | |
* → 先頭に何か入力されていれば、4列目までをクリアする | |
*/ | |
for ( j = 1 ; j <= 4 ; j++ ) { | |
sheet.getRange( i, j ).setValue( "" ); | |
} | |
} | |
} | |
for ( i = startMail ; ; i++ ) { | |
if ( sheet.getRange( i, 6 ).getValue() == "" ) { | |
/* もうクリアされている | |
* → 先頭に何も入力されていなければ、クリア終了 | |
*/ | |
break; | |
} | |
else { | |
/* まだクリアしなきゃいけない | |
* → 先頭に何か入力されていれば、4列目までをクリアする | |
*/ | |
for ( j = 1 ; j <= 2 ; j++ ) { | |
sheet.getRange( i, 6 - j + 1 ).setValue( "" ); | |
} | |
} | |
} | |
sheet.getRange( "A5" ).setValue( "" ); // A5 クラス一覧の見出し | |
} | |
/******************************************************************************** | |
* 参加しているクラスの一覧を一覧にするセルをクリアする | |
* → セル「A3」を基準に、先頭のセルに何か入力されていればクリアしていく | |
*/ | |
function clearInputCells( ) { | |
const sheet = SpreadsheetApp.getActiveSheet( ); // アクティブなシートを取得 | |
sheet.getRange( "B1" ).setValue( "" ); // B1 現在の実行者 | |
sheet.getRange( "B3" ).setValue( "" ); // B3 対象のクラスID | |
sheet.getRange( "A5" ).setValue( "" ); // A5 クラス一覧の見出し | |
} | |
/******************************************************************************** | |
* セル「B1」にスクリプトを実行しているアカウントを設定する | |
*/ | |
function getOwnerID( ) { | |
const sheet = SpreadsheetApp.getActiveSheet( ); // アクティブなシートを取得 | |
// 現在の実行しているアカウントのメールアドレスを確認 | |
var actUser = Session.getActiveUser(); | |
var email = actUser.getEmail(); | |
// B1 現在の所有者 | |
sheet.getRange( "B1" ).setValue( email ); | |
return; | |
} | |
/******************************************************************************** | |
* セル「B1」に指定されたアカウントが所有するクラスの一覧を取得する | |
*/ | |
function getOwnerCourses( ) { | |
var i; | |
// 現在の実行しているアカウントのメールアドレスを確認 | |
var actUser = Session.getActiveUser(); | |
var email = actUser.getEmail(); | |
console.log( "Active ID:" + email ); | |
/*** (0) 処理対象となるアカウントをセル「B1」から取得する ***/ | |
const sheet = SpreadsheetApp.getActiveSheet( ); // アクティブなシートを取得 | |
const range = sheet.getRange( 'B1' ); // B1 に現在の所有者のアカウントが入力されているはず | |
const owner = range.getValue( ); | |
console.log( "Target ID:" + owner ); | |
// メールアドレスからアカウントの識別子を取得する | |
var profileArgs = { userId : owner }; | |
var user = Classroom.UserProfiles.get( owner ); | |
console.log( "ownerId:" + user.id ); | |
/*** (1) 一覧を出力する部分をまずクリアする ***/ | |
clearCells( ); | |
sheet.getRange( "A5" ).setValue( owner + " が参加しているクラスは..." ); | |
/*** (2) 指定されたアカウントの参加クラスを確認する ***/ | |
var optionalArgs = { | |
teacherId : owner, | |
courseStates : 'ACTIVE', // ACTIVE なクラスだけを対象に | |
}; | |
var response = Classroom.Courses.list( optionalArgs ); | |
var courses = response.courses; | |
if (courses && courses.length > 0) { | |
console.log('Classroom (%s)', courses.length); | |
// 教師として参加しているクラスの分だけくり返す | |
for ( i = 0; i < courses.length; i++ ) { | |
var course = courses[ i ]; | |
console.log( '%s (%s)', course.name, course.id ); | |
sheet.getRange( startLine + i, 1 ).setValue( course.id ); // クラスの ID | |
sheet.getRange( startLine + i, 2 ).setValue( course.name ); // クラスの名称 | |
// 当該クラスの所有者であるかどうかを表示(担任 or 副担任) | |
if ( course.ownerId == user.id ) { | |
sheet.getRange( startLine + i, 3 ).setValue( "担任(所有者)" ); | |
} | |
else { | |
sheet.getRange( startLine + i, 3 ).setValue( "副担任" ); | |
} | |
// 当該クラスの状態を表示 | |
sheet.getRange( startLine + i, 4 ).setValue( course.courseState ); | |
} | |
} else { | |
// 教師としてクラスに参加していない | |
console.log( 'No courses found.' ); | |
sheet.getRange( startLine, 1 ).setValue( "No courses found." ); | |
} | |
} | |
/******************************************************************************** | |
* セル「F2」以下に指定されたアカウントをクラスに追加する | |
*/ | |
function addStudentCourses( ) { | |
var i; | |
/*** (1) 処理対象となるクラスの ID をセル「B3」から取得する ***/ | |
const sheet = SpreadsheetApp.getActiveSheet( ); // アクティブなシートを取得 | |
const range2 = sheet.getRange( 'B3' ); // B3 に譲渡対象のクラスの ID が入力されているはず | |
const classID = range2.getValue( ); | |
console.log( "Classroom ID:" + classID ); | |
/*** (2) 処理対象となるクラスのデータを取得する ***/ | |
var classData = Classroom.Courses.get( classID ); | |
console.log( "enrollmentCode : " + classData.enrollmentCode ); | |
/*** (3) 生徒のアカウントをクラスに参加させる ***/ | |
for ( i = startMail ; ; i++ ) { | |
if ( sheet.getRange( i, 6 ).getValue() == "" ) { | |
/* もう登録するアカウントなし | |
* → 何も入力されていなければ、登録終了 | |
*/ | |
break; | |
} | |
else { | |
/* まだ登録しなきゃいけない | |
*/ | |
var eMail = sheet.getRange( i, 6 ).getValue( ); | |
var optArgs = { | |
"enrollmentCode": classData.enrollmentCode, | |
}; | |
var req = { | |
"userId": eMail, | |
}; | |
var res; | |
try { | |
res = Classroom.Courses.Students.create( req, classID, optArgs ); | |
sheet.getRange( i, 5 ).setValue( "〇" ); | |
} catch ( e ) { | |
Logger.log( e ); | |
sheet.getRange( i, 5 ).setValue( "×" ); | |
} | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment