😁

復習ツール作った(GAS×スプシ)

2024/10/19に公開

いま絶賛数学勉強中なので、いい復習ツールはないかと考え、考案、
年をとると頭もおとろえ、復習がだいじだとおもったので、
勉強した日から+1日、3日、7日、31日で関数を設定

TRUEなら「今日復習!!」の文字を表示する。

=IF(OR(TODAY()=$G6+1,TODAY()=$G6+3,TODAY()=$G6+7,TODAY()=$G6+31),"今日復習!!","")

この単元のURLをクリックして移動するわけ。

いかに参考シートURLはっておくよ勝手にコピーなりなんなりお好きにどうぞ

https://docs.google.com/spreadsheets/d/1dNuVXHwLTxxDSc-YvwkRymoyty8wf9sYRlrFHFRf92Y/edit?gid=664782689#gid=664782689

しかし、勉強するたびにデータが累積して,
いちいちどれが復習なのか確認するのはマジだるいので、自動化したい。

流れは以下の通り

1.関数が復習かどうか判定し、表示する。
2.GASが時間で動き出す。
3.シートを見回り
4.今日復習!!があれば文章を追加
5.シート見回りループ終了
6.復習が必要な一覧をメールに張り付け送信

タイトルは復習お知らせスクリプト。

適当にchatgptにお願いしてコードを生成する
これを適当にチューニングしてく、初めての実行の場合、いろいろアラートがあがるが割愛
適当に支持だししたら、なんかえらい出力しおった。

function extractAllSheets() {
  // 現在のスプレッドシートを取得
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var allSheets = spreadsheet.getSheets();
  
  // 結果をまとめる新しいシートを作成
  var resultSheet = spreadsheet.getSheetByName("Extracted Data");
  if (!resultSheet) {
    resultSheet = spreadsheet.insertSheet("Extracted Data");
  } else {
    resultSheet.clear(); // 既存のデータをクリア
  }

  var rowIndex = 1;

  // 各シートをループしてデータを取得
  allSheets.forEach(function(sheet) {
    if (sheet.getName() !== "Extracted Data") { // 結果シートを除外
      var data = sheet.getDataRange().getValues();
      
      // シート名を追加
      resultSheet.getRange(rowIndex, 1).setValue("Sheet Name: " + sheet.getName());
      rowIndex++;

      // データを追加
      resultSheet.getRange(rowIndex, 1, data.length, data[0].length).setValues(data);
      rowIndex += data.length + 1; // 次のシートのために行を空ける
    }
  });

  Logger.log("All sheets extracted to 'Extracted Data'.");
}



悪さしてるコードをコメントアウト

  // 結果をまとめる新しいシートを作成
  var resultSheet = spreadsheet.getSheetByName("Extracted Data");
  if (!resultSheet) {

    // resultSheet = spreadsheet.insertSheet("Extracted Data");
  } else {
    resultSheet.clear(); // 既存のデータをクリア
  }

どうやらいかでデータ一覧が表示されているらしい

 var data = sheet.getDataRange().getValues();
 Logger.log(data)

ここで、今日復習!!と表示されていれば、メールの文章に追加する。


      for (var i = 0; i < data.length; i++) {
        // Logger.log(data[i])
        if (data[i][6] === "今日復習!!") { // 条件を変更
          urldats.push(data[i]);
          Logger.log(data[i])

          // url += `<p>問題内容: <a href="${data[i][2]}" target="_blank">${data[i][1]}</a></p>`;
          url += `問題内容:${data[i][1]} URL:${data[i][2]}\n`;

        }
      }

あとはメール送るだけ、おなじみGPTちゃん

function sendEmail() {
  var recipient = "recipient@example.com"; // 受信者のメールアドレスを指定
  var subject = "メールの件名"; // メールの件名
  var body = "こんにちは!\n\nこれはテストメールです。"; // メールの本文

  // メールを送信
  MailApp.sendEmail(recipient, subject, body);
}

問題の内容は1列目、URLは二列目なのでいかのように設定する。

url += `問題内容:${data[i][1]} URL:${data[i][2]}\n`;

いい感じ!!

トリガーは毎日3:00にセットする。まあ普通は24:00だよね

全体のコードは以下
よけいな部分はべつにそのままにしてある。
全体の工数としては、30分くらい。

function extractAllSheets() {
  // 現在のスプレッドシートを取得
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var allSheets = spreadsheet.getSheets();
  var urldats = []
  url = ''
  // 結果をまとめる新しいシートを作成
  var resultSheet = spreadsheet.getSheetByName("Extracted Data");
  if (!resultSheet) {

    // resultSheet = spreadsheet.insertSheet("Extracted Data");
  } else {
    resultSheet.clear(); // 既存のデータをクリア
  }

  var rowIndex = 1;

  // 各シートをループしてデータを取得
  allSheets.forEach(function (sheet) {
    if (sheet.getName() !== "Extracted Data") { // 結果シートを除外
      var data = sheet.getDataRange().getValues();


      for (var i = 0; i < data.length; i++) {
        // Logger.log(data[i])
        if (data[i][6] === "今日復習!!") { // 条件を変更
          urldats.push(data[i]);
          Logger.log(data[i])

          // url += `<p>問題内容: <a href="${data[i][2]}" target="_blank">${data[i][1]}</a></p>`;
          url += `問題内容:${data[i][1]} URL:${data[i][2]}\n`;

        }
      }

      // シート名を追加
      resultSheet.getRange(rowIndex, 1).setValue("Sheet Name: " + sheet.getName());
      rowIndex++;

      // データを追加
      resultSheet.getRange(rowIndex, 1, data.length, data[0].length).setValues(data);
      rowIndex += data.length + 1; // 次のシートのために行を空ける
    }
  });

  Logger.log("All sheets extracted to 'Extracted Data'.");
  sendEmail(url)
}
function sendEmail(text) {
  var recipient = "メールは書き換えてね"; // 受信者のメールアドレスを指定
  var subject = "メールの件名"; // メールの件名
  // var body = "こんにちは!\n\nこれはテストメールです。"; // メールの本文

  // メールを送信
  MailApp.sendEmail(recipient, subject, text);
}





Discussion