【Google Classroom】クラス一覧をスプレッドシートで取得する

前回に引き続き、Google Classroomの活用記事です。
基本的には、前回の記事を読んだ人向けの記事になっています。(GASを触ったことがある人であれば、この記事単発でも大丈夫です)

前回は、クラスを一括作成する方法を紹介しましたが、今回は、クラスの一覧表を作成する方法を紹介します。

*この記事を参考にしたことにより、ご利用者様、または第三者に損害・トラブル等が発生した場合でも、一切の責任を負いません。自己責任の上でのご利用をお願いいたします。

スプレッドシートを作る

まずは、スプレッドシートを用意してください。
前回の記事もお試しになっている場合は、そのファイルを使用できます。

用意できたら、コース情報という名前のシートを用意してください。
シート全体を選択し、セルの書式は「書式なしテキスト」にしておいてください。

下記の画像と同じ内容にしてください。(一言一句同じである必要はありません)

スプレッドシートの見本
今回は列数がかなり多い・・・

左上のボタンは、挿入 → 図形描画で作成しました。こちらも、どんな見た目でも構いません。

スクリプトを貼り付ける+ボタンに割り当てる

下記のコードをスクリプトエディタに貼り付けてください。
前回の記事と同じスプレッドシートを使用している場合は、前回貼り付けたスクリプトの下に、今回のスクリプトを貼り付けてください。

/***********************************************
 *  コース情報一覧を作成する
 ***********************************************/
function listCourses() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("コース情報");
  const select = Browser.msgBox("コース情報を抽出します。よろしいですか?", Browser.Buttons.OK_CANCEL);
  if (select == "cancel") {
      Browser.msgBox("キャンセルしました");
      return;
  }
  sheet.getRange(5, 1, sheet.getMaxRows(), 15).clearContent()
  let continueSelect = "yes";
  let procCnt = 0;
  const optionalArgs = {};
  if ( sheet.getRange(2, 2).getValue() ){ optionalArgs.studentId = sheet.getRange(2, 2).getValue() };
  if ( sheet.getRange(2, 3).getValue() ){ optionalArgs.teacherId = sheet.getRange(2, 3).getValue() };
  if ( sheet.getRange(2, 4).getValue() ){ optionalArgs.courseStates = sheet.getRange(2, 4).getValue() };
  if ( sheet.getRange(2, 5).getValue() ){ optionalArgs.pageSize = sheet.getRange(2, 5).getValue() };
  while ( continueSelect == "yes" ) {
    const response = Classroom.Courses.list(optionalArgs);
    const courses = response.courses;
    const nextPageToken = response.nextPageToken;
    console.log(response);
    if (courses) {
      for ( let i = 0; i < courses.length; i++ ){
        sheet.getRange(i + 5 + procCnt, 1).setValue(courses[i].id);
        sheet.getRange(i + 5 + procCnt, 2).setValue(courses[i].name);
        try {
          sheet.getRange(i + 5 + procCnt, 3).setValue(Classroom.Courses.Aliases.list(courses[i].id).aliases[0].alias);
        } catch(e) {
          // no alias
        }
        sheet.getRange(i + 5 + procCnt, 4).setValue(courses[i].section);
        sheet.getRange(i + 5 + procCnt, 5).setValue(courses[i].room);
        sheet.getRange(i + 5 + procCnt, 6).setValue(courses[i].ownerId);
        try {
          sheet.getRange(i + 5 + procCnt, 7).setValue(Classroom.UserProfiles.get(courses[i].ownerId).emailAddress);
        } catch(e) {
          sheet.getRange(i + 5 + procCnt, 3).setValue(e);
        }
        sheet.getRange(i + 5 + procCnt, 8).setValue(courses[i].courseState);
        sheet.getRange(i + 5 + procCnt, 9).setValue(courses[i].alternateLink);
        sheet.getRange(i + 5 + procCnt, 10).setValue(courses[i].enrollmentCode);
        sheet.getRange(i + 5 + procCnt, 11).setValue(courses[i].teacherGroupEmail);
        sheet.getRange(i + 5 + procCnt, 12).setValue(courses[i].courseGroupEmail);
        sheet.getRange(i + 5 + procCnt, 13).setValue(courses[i].teacherFolder.alternateLink);
        sheet.getRange(i + 5 + procCnt, 14).setValue(courses[i].creationTime);
        sheet.getRange(i + 5 + procCnt, 15).setValue(courses[i].updateTime);
      }
    } else {
      Browser.msgBox("対象データがありませんでした。"); 
      return;
    }
    
    SpreadsheetApp.flush();
    if ( nextPageToken ) {
      procCnt += optionalArgs.pageSize;
      optionalArgs.pageToken = nextPageToken;
      continueSelect = Browser.msgBox("他にもデータがあります。引き続き抽出しますか?", Browser.Buttons.YES_NO);
    } else {
      continueSelect = "no";
    }
  }
  Browser.msgBox("処理が終了しました。");  
}

そして、スプレッドシート上のコース情報抽出ボタンlistCoursesを割り当ててください。

実行してみる

完成したので、早速コース情報抽出ボタンを押してみます。

実行確認のダイアログ
OKをクリック
抽出した結果
クラスの一覧が抽出できました

無事、クラスの一覧が抽出できました。

ちなみに、画面上部の検索条件欄で、条件を絞り込むことができます。

学生ID or Email指定した学生が参加しているコースのみ抽出できます。
ID、メールアドレス、me のいずれかを入力してください。
教員ID or Email指定した教員が参加しているコースのみ抽出できます。
ID、メールアドレス、me のいずれかを入力してください。
ステータス抽出するクラスのステータスを指定できます。
ACTIVE、ARCHIVED、PROVISIONED、DECLINEDのいずれかを入力してください。
(この4つを「データの入力規則」に設定しておくと便利です)
抽出件数抽出する件数を指定できます。
対象クラスが多いと、結構処理が重くなるので、必要に応じて指定してください。

おわりに

いかがでしたでしょうか。参考になれば幸いです。

次回は、クラスのステータス一括変更、クラスの一括削除について紹介したいと思います。

コメント

  1. 質問したい人 より:

    TypeError: Cannot read property ‘getRange’ of null
    と出る場合はどのように対策すれば良いですか?

タイトルとURLをコピーしました