Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save Tomokatsu-Sakamoto/a844082c06233c3bb972f13259ade72d to your computer and use it in GitHub Desktop.
Save Tomokatsu-Sakamoto/a844082c06233c3bb972f13259ade72d to your computer and use it in GitHub Desktop.
'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