ITストラテジスト試験を終え、今は行政書士の勉強をしています。行政書士に限らず自己研鑽の時間に充てた時間をスプレッドシートに記録したいと思い、スプレッドシートを自動作成するためのApps Scriptを備忘録を兼ねて公開します。
こんな感じのスプシが作成できます。

// ****************************************
// ★の箇所を作成する月によって変更してください
// ****************************************
function createStudyLogForMay() {
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
sheet.clear();
// ヘッダー行
const headers = ['日付', '曜日', '目標時間(分)', '勉強項目', '勉強時間(分)', '達成度バー'];
sheet.appendRow(headers);
let row = 2;
let EndDateCnt = 31 // ★
for (let day = 1; day <= EndDateCnt; day++) {
const currentDate = new Date(2025, 4, day); // ★ 4 = May (0-based)
const dateStr = Utilities.formatDate(currentDate, 'Asia/Tokyo', 'yyyy/MM/dd');
const dayStr = ['日', '月', '火', '水', '木', '金', '土'][currentDate.getDay()];
// 5行分書き込み
for (let i = 0; i < 5; i++) {
sheet.appendRow([
'', // B: 日付
'', // C: 曜日
'', // D: 目標時間
'', // E: 勉強項目
'', // F: 勉強時間
'' // G: 達成度バー
]);
}
// セル結合
sheet.getRange(row, 1, 5).mergeVertically().setValue(dateStr); // 日付
sheet.getRange(row, 2, 5).mergeVertically().setValue(dayStr); // 曜日
sheet.getRange(row, 3, 5).mergeVertically().setValue(180); // 目標時間(仮)
// F列(達成度バー)に SPARKLINE を挿入
const sumRange = `E${row}:E${row + 4}`;
const targetCell = `C${row}`;
const formula = `=IF(${targetCell}="", "", SPARKLINE(SUM(${sumRange}), {"charttype","bar";"max", ${targetCell};"color1","#030899"}))`;
sheet.getRange(row, 6).setFormula(formula);
row += 5;
}
// 書式設定
sheet.setColumnWidths(1, 6, 130);
sheet.getRange("A1:F1").setFontWeight("bold").setBackground("#dce6f1");
// 文字の垂直方向を中央に
sheet.getRange(`A2:F${row - 1}`).setVerticalAlignment("middle");
// 先頭行固定
sheet.setFrozenRows(1);
}
本当は引数に年月を渡すようにするべきなのですが、手抜きしちゃいました。