У меня есть следующая таблица, и я хочу отправить людям напоминание, а также добавить события в календарь. Я написал следующий код, который работает, но имеет проблемы. Я активировал триггер, который при каждом редактировании запускает код. Таким образом, чтобы избежать дублирования электронных писем или дублирования «добавления в календарь», я добавил два столбца eventid и calendarid, которые заменяют ячейку на напоминание, если напоминание отправлено, или обновление календаря, если событие добавлено в календарь. Хотя это решает проблему дублирования, но вызывает другие проблемы:
, если я отредактирую любую информацию в электронной таблице, он не будет отправлять напоминание или обновлять календарь, поскольку это уже было сделано. даже если я удаляю текст календаря из calendarid, он добавляет новое событие вместо изменения существующего.
в столбце электронной почты, мне нужно заполнить все ячейки, чтобы получать напоминания. например, если я заполню первую ячейку, оставлю вторую ячейку пустой и заполню третью ячейку, электронное письмо, введенное в третью ячейку, не получит напоминание.
I буду признателен, если кто-нибудь может помочь мне улучшить мой код. Это будет много значить для меня. Спасибо
function createCalendarEvent() {
var sheet = SpreadsheetApp.getActiveSheet();
// figure out what the last row is
var lastRow1 = sheet.getLastRow();
// the rows are indexed starting at 1, and the first row
// is the headers, so start with row 5
var startRow1 = 5;
// grab column 6 (the 'days left' column)
var range = sheet.getRange(5,6,lastRow1-startRow1+1,1 );
var numRows = range.getNumRows();
var days_left_values = range.getValues();
range = sheet.getRange(5, 1, lastRow1-startRow1+1, 1);
var start_info_values = range.getValues();
range = sheet.getRange(5, 2, lastRow1-startRow1+1, 1);
var end_info_values = range.getValues();
range = sheet.getRange(5, 3, lastRow1-startRow1+1, 1);
var reminder_info_values = range.getValues();
range = sheet.getRange(5, 4, lastRow1-startRow1+1, 1);
var names_info_values = range.getValues();
range = sheet.getRange(5, 5, lastRow1-startRow1+1, 1);
var emails_info_values = range.getValues();
range = sheet.getRange(5, 7, lastRow1-startRow1+1, 1);
var eventID_info_values = range.getValues();
range = sheet.getRange(5, 8, lastRow1-startRow1+1, 1);
var CalID_info_values = range.getValues();
var warning_count = 0;
var msg = "";
var complete="ReminderSent";
var CalendarUpdated="CalendarUpdated";
var calendarId = sheet.getRange("H2").getValue();
var eventCal = CalendarApp.getCalendarById(calendarId);
range = sheet.getRange(5, 1, lastRow1-startRow1+1, 8);
var data = range.getValues();
for (var i = 0; i < data.length; ++i) {
var start = start_info_values [i][0];
var end = end_info_values [i][0];
var reminder_name = reminder_info_values[i][0];
var names = names_info_values [i][0];
var CalID = CalID_info_values [i][0]; //event marked CalendarUpdated
if (CalID != CalendarUpdated) {
var currentCell = sheet .getRange(startRow1 + i, 8);
eventCal.createEvent(eminder_name, start, end, {description: names} );
currentCell.setValue(CalendarUpdated);
}
}
// Loop over the days left values
for (var i = 0; i <= numRows - 1; i++) {
var days_left = days_left_values[i][0];
if(days_left <=2) {
//var reminder_name = reminder_info_values[i][0];
msg = msg + "Reminder: "+reminder_name+" is due in "+days_left+" days.\n";
warning_count++;
}
var emails= emails_info_values [i][0];
if(warning_count) {
var eventID= eventID_info_values[i][0];
if(eventID!=complete){
var currentCell = sheet .getRange(startRow1 + i, 7);
MailApp.sendEmail(emails,"Reminder", msg);
currentCell.setValue(complete);
}
}
}
}