勉強ログ記録用のスプレッドシート作成スクリプト

プログラム

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);
}

本当は引数に年月を渡すようにするべきなのですが、手抜きしちゃいました。

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