function onEdit(e) {
try {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
if (sheet.getName() === "To Do List" && e.range.getColumn() == 9) {
var row = e.range.getRow();
if (row >= 3) {
var isChecked = e.range.getValue();
if (isChecked) {
var ui = SpreadsheetApp.getUi();
var today = new Date();
var formattedDate = Utilities.formatDate(today, Session.getScriptTimeZone(), 'MM/dd/yyyy');
var values = sheet.getRange(row, 1, 1, 8).getValues()[0];
var assignedTo = values[3];
var completionDate = formattedDate;
var status = "Completed";
var response = ui.alert('Completion Confirmation', 'Date completed: ' + formattedDate + `your text`'\nClick OK to confirm.', ui.ButtonSet.OK_CANCEL);
if (response == ui.Button.OK) {
var completedSheet = ss.getSheetByName("Completed Work List");
values.splice(2, 0, formattedDate);
completedSheet.appendRow(values);
Logger.log('About to send email');
sendCompletionEmail(assignedTo, values, completionDate, status);
} else {
e.range.setValue(false);
}
}
}
}
} catch (error) {
Logger.log('Error: ' + error.toString());
}
}
function sendCompletionEmail(assignedTo, values, completionDate, status) {
var emails = {
xxxxxxx
};
var assignedEmail = emails[assignedTo];
var subject = values[4] + ': ' + values[2];
var message = 'The following task has been completed:\n\n' +
'Date: ' + values[0] + '\n' +
'Company: ' + values[1] + '\n' +
'Work: ' + values[2] + '\n' +
'Assigned to: ' + values[3] + '\n' +
'Priority: ' + values[4] + '\n' +
'Date to be done in: ' + values[5] + '\n' +
'Work Description: ' + values[6] + '\n' +
'Completion Date: ' + completionDate + '\n' +
'Status: ' + status;
Logger.log('Sending email to: ' + assignedEmail);
MailApp.sendEmail({
to: assignedEmail,
cc: xxxxxx,
subject: subject,
body: message
});
}
Я удалил список адресов электронной почты, потому что это открытый исходный код. Это мой код, в котором, если установить флажок для списка дел, появится поле с вопросом, завершена ли задача. Если пользователь говорит «ОК», он должен отправить электронное письмо. Я новичок в программировании и разрабатываю его с помощью
Я разрешил Gmail отправлять электронную почту, и она работает с другим тестовым письмом function.function MailApp.sendEmail( )
это работает и отправляет электронную почту, но при выполнении функции onedit выдает:
Jun 28, 2024, 9:36:18 AM
Info
About to send email
Jun 28, 2024, 9:36:18 AM
Info
Sending email to: [email protected]
Jun 28, 2024, 9:36:18 AM
Info
Ошибка: Исключение: у вас нет разрешения на вызов MailApp.sendEmail. Необходимые разрешения: https://www.googleapis.com/auth/script.send_mail
Я уже добавил "https://www.googleapis.com/auth/script.send_mail"
на oauthScopes
в файле JSON, но проблема с отправкой электронной почты остается.
{
"timeZone": "Asia/Kathmandu",
"dependencies": {},
"exceptionLogging": "STACKDRIVER",
"runtimeVersion": "V8",
"oauthScopes": [
"https://googleapis.com/auth/spreadsheets",
"https://googleapis.com/auth/script.send_mail"
]
}
Здесь опечатка. В сценарии этого нет. { "timeZone": "Азия/Катманду", "зависимости": {}, "ExceptionLogging": "STACKDRIVER", "runtimeVersion": "V8", "oauthScopes": [ "googleapis.com/auth/spreadsheets ", " googleapis.com/auth/script.send_mail" ] }
Тогда, пожалуйста, отредактируйте вопрос, чтобы убрать отвлекающие факторы.
этому сценарию необходимо будет использовать устанавливаемый триггер onEdit. Простой триггер onEdit не сможет отправить электронное письмо (поскольку для этого требуется авторизация).
Пользователям, которые будут запускать код, необходимо будет авторизовать сценарий, чтобы предоставить разрешение для сценария приложения, и тогда они смогут правильно отправлять электронные письма.
(A SIMPLE trigger "OnEdit"
) не может получить доступ к сервисам, требующим авторизации. Например, простой триггер не может отправить электронное письмо, поскольку служба Gmail требует авторизации, поэтому вы можете идеально запустить его с другим тестовым электронным письмом, но не при использовании функции «При редактировании» в коде сценария вашего приложения.
Вам нужно будет настроить устанавливаемый триггер в проекте сценария приложения, чтобы иметь возможность отправлять запрос.
Чтобы вручную создать устанавливаемый триггер через диалоговое окно в редакторе скриптов, выполните следующие действия:
Дополнительную информацию об устанавливаемых триггерах можно найти здесь: https://developers.google.com/apps-script/guides/triggers/installable.
Вот документация по простым ограничениям триггеров: Документация Google — Триггеры — Ограничения.
Надеюсь, это сработает. Если нет, поделитесь копией своей таблицы, чтобы у нас были примеры данных для работы.
Потерянный
b
передhttps://
делает JSON недействительным. Исправьте опечатку и повторите попытку.