👌
追加
function getNewEmailsByToAddressToSheet() {
// 現在の日付を取得
var today = new Date();
// 処理対象の開始日と終了日を設定
var startDate = new Date('2024-10-01');
var endDate = new Date('2024-10-31');
// 現在の日付が指定した期間外なら、処理を終了
if (today < startDate || today > endDate) {
return;
}
// メール検索用の宛先とCCアドレスを指定
var toAddress = "@gmail.com";
var ccAddress = "@gmail.com";
// アクティブなスプレッドシートとシート名を取得
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheetName = "シート1";
var sheet = spreadsheet.getSheetByName(sheetName);
// シートが存在しない場合、エラーメッセージを出して終了
if (!sheet) {
throw new Error("指定されたシートが見つかりません: " + sheetName);
}
// シートの1行目にヘッダーが設定されていない場合、ヘッダーを設定
if (sheet.getRange(1, 1).getValue() !== "No.") {
sheet.getRange(1, 1).setValue("No."); // No.列
sheet.getRange(1, 2).setValue("Check"); // チェックボックス列
sheet.getRange(1, 3).setValue("担当者"); // 担当者列
sheet.getRange(1, 4).setValue("記入者"); // 記入者列
sheet.getRange(1, 5).setValue("受信時間"); // 受信時間列
sheet.getRange(1, 6).setValue("件名"); // 件名列
}
// 担当者と記入者のリストを定義
var responsiblePersons = ["対応中", "対応不要", "対応不要"];
var authors = ["記入者A", "記入者B", "記入者C"];
// 当日0時と翌日0時を取得し、検索範囲を1日に限定
var startOfDay = new Date(today.getFullYear(), today.getMonth(), today.getDate(), 0, 0, 0);
var endOfDay = new Date(today.getFullYear(), today.getMonth(), today.getDate() + 1, 0, 0, 0);
// Gmail検索のためにタイムスタンプを取得
var startTime = Math.floor(startOfDay.getTime() / 1000);
var endTime = Math.floor(endOfDay.getTime() / 1000);
// Gmailの検索クエリを作成
var query = 'to:' + toAddress + ' OR cc:' + ccAddress + ' after:' + startTime + ' before:' + endTime;
// クエリに基づいてGmailスレッドを検索
var threads = GmailApp.search(query);
// 既存のデータを取得するための関数
function getExistingData(sheet) {
var lastRow = sheet.getLastRow();
if (lastRow > 1) {
// 既存データ(受信時間と件名)を取得して返す
return sheet.getRange(2, 5, lastRow - 1, 2).getValues();
}
return [];
}
// シートの既存データを取得
var existingData = getExistingData(sheet);
// 新しいデータを書き込むための行を設定
var row = sheet.getLastRow() + 1;
// 検索した各スレッドに対して処理を行う
for (var i = 0; i < threads.length; i++) {
// 各スレッド内のメッセージを取得
var threadMessages = threads[i].getMessages();
// メッセージを日付順に並べ替える
threadMessages.sort(function(a, b) {
return a.getDate().getTime() - b.getDate().getTime();
});
// 各メッセージに対して処理を行う
for (var j = 0; j < threadMessages.length; j++) {
var message = threadMessages[j];
var subject = message.getSubject(); // 件名を取得
var date = message.getDate(); // 受信時間を取得
// 日付をフォーマットしてMM/dd/HH:mm形式に変換
var formattedDate = Utilities.formatDate(date, Session.getScriptTimeZone(), "MM/dd/HH:mm");
// 既存データと比較して、重複しているかを確認
var isDuplicate = existingData.some(function(existingRow) {
return existingRow[0] === formattedDate && existingRow[1] === subject;
});
// 重複している場合、このメッセージをスキップ
if (isDuplicate) {
continue;
}
// 重複していない場合、新しい行にデータを書き込む
sheet.getRange(row, 1).setValue(row - 1); // No.を設定
sheet.getRange(row, 5).setValue(formattedDate); // 受信時間を設定
sheet.getRange(row, 6).setValue(subject); // 件名を設定
sheet.getRange(row, 2).insertCheckboxes(); // チェックボックスを挿入
// 担当者列にデータバリデーション(リストから選択)を設定
var responsibleCell = sheet.getRange(row, 3);
var responsibleRule = SpreadsheetApp.newDataValidation().requireValueInList(responsiblePersons).build();
responsibleCell.setDataValidation(responsibleRule);
// 記入者列にデータバリデーション(リストから選択)を設定
var authorCell = sheet.getRange(row, 4);
var authorRule = SpreadsheetApp.newDataValidation().requireValueInList(authors).build();
authorCell.setDataValidation(authorRule);
// 次の行に移動
row++;
}
}
}
Discussion