Nhờ các cao nhân chỉ cách tự động hẹn giờ gửi email trong google sheet.

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

tgiang1987

Thành viên mới
Tham gia
14/12/23
Bài viết
4
Được thích
0
Chào mọi người!
Mình đang gặp khó trong việc dùng Apps Script trong Google Sheet để tự động gửi Email để nhắc việc.

Như trong hình mình có đính kèm là Google Sheet của công ty mình, Mình muốn Google Sheet tự động gửi email cho người chiụ trách nhiệm (Actual Due) vào ngày (Calibration Due) kèm theo các thông tin từ cột B đến cột G.

Mình lấy ví dụ như dòng đầu tiên. Mình muốn Google Sheet sẽ gửi email cho Barry vào ngày 05/11/2024 (MM/DD/YY), và cứ tiếp tục gửi mỗi ngày 1 email trong vòng 1 tháng cho đến ngày 06/11/2024 (MM/DD/YY) là ngày DUE DAY.

Mọi người giúp mình với, Boss giao cho cả tuần rồi mà mình vẫn chưa làm được. Cám ơn mọi người nhiều lắm!
 

File đính kèm

  • Screenshot 2023-12-14 at 10.40.03.png
    Screenshot 2023-12-14 at 10.40.03.png
    227.5 KB · Đọc: 16
  • Screenshot 2023-12-14 at 10.51.52.png
    Screenshot 2023-12-14 at 10.51.52.png
    242.9 KB · Đọc: 15
Lần chỉnh sửa cuối:
Cái này lèo cái là xong thôi mà.
Dùng trigger theo ngày đó.
Code gửi mail kiểm tra dữ liệu theo ngày rồi gửi đi thôi.
 
Bạn có thể giúp mình code cái ví dụ của mình đc ko? Ở dòng đầu tiên ví dụ như ngày DUE DAY là ngày 18/1/2024, mình muốn Google Sheet tự gửi email cho Barry bắt đầu từ ngày 18/12/2023, với trích xuất dữ liệu từ cột A cho đến cột. Và sẽ gửi mỗi ngày 1 email trong vòng 1 tháng (Cho đến ngày 18/1/2024). Địa chỉ email mình lấy ví dụ là gdo@bvc.com
Cám ơn bạn rất nhiều!
 
Vùng dữ liệu
Cần có cột tích chọn gửi
Cần có cột báo trạng thái gửi

Các dòng thông tin người cần gửi trùng nhau lại gửi riêng 1 mail hay gộp chung?

Dưới đây là một ví dụ mã Appscript:
JavaScript:
var id = "id dự án";
try {
  var ss = SpreadsheetApp.openById(id);
}
catch(err) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
};

var sheet = ss.getSheetId(652145055); //ID trang tính
var trigger1 = 'sendmail1';

function createTimeDrivenTriggers() {
  // Trigger every 7 giờ sáng thứ 2, 3, 4, 5, 6, 7, CN
  var n = trigger1;
  var h = 7;
  clearTrigger(n);
  createTriggerEveryDay(h, ScriptApp.WeekDay.MONDAY, n);
  createTriggerEveryDay(h, ScriptApp.WeekDay.TUESDAY, n);
  createTriggerEveryDay(h, ScriptApp.WeekDay.WEDNESDAY, n);
  createTriggerEveryDay(h, ScriptApp.WeekDay.THURSDAY, n);
  createTriggerEveryDay(h, ScriptApp.WeekDay.FRIDAY, n);
  createTriggerEveryDay(h, ScriptApp.WeekDay.SATURDAY, n);
  createTriggerEveryDay(h, ScriptApp.WeekDay.SUNDAY, n);
}
//====================================================================
function createTriggerEveryDay(time, wd, trigger) {
  ScriptApp.newTrigger(trigger).timeBased().onWeekDay(wd).atHour(time).create();
}
//====================================================================
function clearTrigger(){
  var triggers = ScriptApp.getProjectTriggers();
  for (var i = 0; i < triggers.length; i++) {
    var hf = triggers[i].getHandlerFunction();
    if (hf == trigger1)ScriptApp.deleteTrigger(triggers[i]);
  }
}
//====================================================================
function clearAllTrigger(){
  var triggers = ScriptApp.getProjectTriggers();
  for (var i = 0; i < triggers.length; i++) {
     ScriptApp.deleteTrigger(triggers[i]);
  }
}
//====================================================================
//====================================================================
function ResetTriggers(){
  clearAllTrigger();
  createTimeDrivenTriggers();
  newTrigger();
}
//====================================================================
function isValidDate(d) {
  if ( Object.prototype.toString.call(d) !== "[object Date]" )
    return false;
  return !isNaN(d.getTime());
}
//====================================================================
// Test if value is a date and if so format
// otherwise, reflect input variable back as-is.
function isDate(sDate) {
  if (isValidDate(sDate)) {
    sDate = Utilities.formatDate(new Date(sDate), "Asia/Saigon", "MM/dd/yyyy");
  }
  return sDate;
}

function sendEmails() {
  var lr = sheet.getLastRow();
  var cells = sheet.getRange("A3:J" + lr.toString());
  var data = cells.getValues();
  var now = new Date();
  for (var i = 1; i < lr; i++) {
    (function(i) {
      var emailAddress = data[i][9];
      var date = data[i][6];
      if (emailAddress != null){
        if (isValidDate(date)){
          var b30 = date.setMonth(date.getMonth()+1);
          if (date >= now && b30 <= now){
            var name = data[i][7];
            var message = 'Gửi ' + name + '\n\n';
            for (var c = 1; c < cells.getNumColumns - 1; c++) {
              message = message + data[0][c] + ': ' + data[i][c] + '\n';
            }
            var subject = 'Nhắc việc ngày: ' + now.toString();
            MailApp.sendEmail(emailAddress, subject, message);
          }
        }
      }
      })(i);
   }
}
 
Lần chỉnh sửa cuối:
Web KT
Back
Top Bottom