😁
復習ツール作った(GAS×スプシ)
いま絶賛数学勉強中なので、いい復習ツールはないかと考え、考案、
年をとると頭もおとろえ、復習がだいじだとおもったので、
勉強した日から+1日、3日、7日、31日で関数を設定
TRUEなら「今日復習!!」の文字を表示する。
=IF(OR(TODAY()=$G6+1,TODAY()=$G6+3,TODAY()=$G6+7,TODAY()=$G6+31),"今日復習!!","")
この単元のURLをクリックして移動するわけ。
いかに参考シートURLはっておくよ勝手にコピーなりなんなりお好きにどうぞ
しかし、勉強するたびにデータが累積して,
いちいちどれが復習なのか確認するのはマジだるいので、自動化したい。
流れは以下の通り
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