【Google Classroom】スプレッドシートを使って課題を一括登録する

こんにちは、ichi3270です。

Google Classroomを運用・管理していると、たまに、課題を一括で投稿する方法はないか?という相談を受けることがあります。

確かに、同じような課題を何回も何回も入力する・・・のは少し大変ですよね。

というわけで、今回は、Googleスプレッドシートを使って、Google Classroomに複数の課題を一括で登録する方法を解説します。

Google Apps Scriptを全くさわったことがない場合は、先にこちらの記事を読んでおいてください。(ある程度わかる人は、いきなりこの記事を読んでも多分大丈夫です)

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

スプレッドシートを作る

まずは、課題のデータを入力するためのスプレッドシートを新規作成します。
前回までの記事を実践している人は、同じスプレッドシートにシートを追加するでもOKです。

シート名は課題作成にしてください。
シート全体を選択し、セルの書式は「書式なしテキスト」にしておいてください。

こんな感じでつくってください。

この画像のように作成してください。文字は一言一句同じである必要はありません。

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

課題作成シートが作成できたら、次はスクリプトエディタに下記のスクリプトを貼り付けてください。(前回までの記事を実践されている場合は、既存のスクリプトの末尾に追加で貼り付けてください。)

/***********************************************
 *  課題を一括で作成する
 ***********************************************/
function createCourseWork() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("課題作成");
  const data = sheet.getDataRange().getValues();
  data.shift();  
  const select = Browser.msgBox( data.length + "件の課題を一括作成します。よろしいですか?", Browser.Buttons.OK_CANCEL);
  if (select == "cancel") {
      Browser.msgBox("キャンセルしました");
      return;
  }
  sheet.getRange(2, 8, sheet.getMaxRows(), 8).clearContent();
  for (i = 0; i < data.length; i++) {
    const dueDateTime = new Date( 
      data[i][4].substr(0, 4),
      data[i][4].substr(4, 2) - 1,
      data[i][4].substr(6, 2),
      data[i][5].substr(0, 2) - 9,
      data[i][5].substr(2, 2)
    );
    const courseWork = {
      title: data[i][1],
      description: data[i][2],
      maxPoints: data[i][3],
      dueDate: { year: dueDateTime.getFullYear(), month: dueDateTime.getMonth() + 1, day: dueDateTime.getDate() },
      dueTime: { hours: dueDateTime.getHours(), minutes: dueDateTime.getMinutes(), seconds: 0, nanos: 0 },
      state: "PUBLISHED",
      workType: "ASSIGNMENT"
    }
    if ( data[i][6] ){
      courseWork["materials"] = [{ 
        "driveFile": {
          "driveFile": { "id": data[i][6] }
        }        
      }];
    }
    try {
      var response = Classroom.Courses.CourseWork.create(courseWork, data[i][0]);
      sheet.getRange(i + 2, 8).setValue(response.id);
    } catch(e) {
      sheet.getRange(i + 2, 8).setValue(e);
    }
  }
  SpreadsheetApp.flush();
  Browser.msgBox("処理が終了しました。");  
}

うーん・・・時間設定の部分はもっとうまいコードがあると思うのですが・・・今の私の能力だとこんな感じですね・・・。

コードの貼り付けが終わったら、スプレッドシート上の課題一括作成ボタンにcreateCourseWorkを割り当ててください。

実行してみる

これでツールは出来上がったので、早速実行してみましょう。

まずは、スプレッドシートにデータを入力していきます。

コースIDがわからない場合は、先にこの記事を実践するといいかも。
もしくは、面倒な場合は、Google Classroom APIの公式でTryができるので、それを使ってみてもいいかと思います。(画面右側のTry this APIで、EXECUTEを押せば、ボタンの下に結果が表示されます)

添付ファイルについては、Google Driveにファイルをアップロードした上で、下記の手順でファイルのIDを調べて入力してください。

これで、データの入力はできたので、課題一括作成を押してみてください。

成功すれば、一番右の作成結果(ID)欄に、課題のIDが表示されます。失敗した場合はエラーメッセージが表示されます。

無事、課題が一括作成できていることが確認できました。

コメント

  1. まーぼー より:

    参考にさせていただいております。ありがとうございました。
    1つの記事(資料)に複数の添付ファイル(ドライブファイル)を一括で掲示できずに、四苦八苦しています。お手数ですが、お教えいただければ幸いです。

  2. lab より:

    有意義な情報、ありがとうございます。
    私も上の「まーぼー」さんと同じように、複数のURLを一括で行いたいのですが、方法がわかりません。
    あるいは投稿後にURLの追加する方法でも代替できるので、紹介していただけると助かります。