У меня есть лист Google, где я хотел бы получать уведомления о любых вставленных в него новых строках/строках.
Есть ли какое-либо расширение, которое может справиться с этим, или я должен использовать скрипт Google Apps, поскольку я новичок в этом и никогда не использовал его раньше.
Я не знаю расширения/надстройки, которое бы справилось с этим, но вы можете сделать это с помощью скрипта.
Ниже будет отправлено электронное письмо по триггеру, который предупредит вас о значениях в столбце A любых новых добавленных строк. Затем он устанавливает значение в столбце c, чтобы сказать, что электронное письмо было отправлено, поэтому, когда скрипт снова запускается, он не принимает их.
function sendEmail() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sh = ss.getSheetByName('Sheet1'); //<-- Change sheet name
var rng = sh.getDataRange();
var val = rng.getDisplayValues();
var lr = rng.getLastRow();
var blank = "";
var match = false;
var body = "Hello, "+"\n\n"+"A row with"; //<-- change to anything
for (var i = 1; i < lr; i++) {
if (val[i][0] != blank && val[i][2] != "Sent") { //<-- 0 refers to value in column a (A=0 B=1 C=2 etc) It also checks here column C for if it has "Sent" in it
var bodyVal = val[i][0];
body = body+"\n - "+bodyVal; //<-- use this to add a value from that row to email body
match = true;
sh.getRange(i+1,3).setValue('Sent'); //<-- where to set the "Sent" value (change above as well)
}
}
body = body+"\n has been added.";
if (match) {
MailApp.sendEmail({
to: "[email protected]", //<-- change email
subject: "Reminder", //<-- email subject
body: body
});
}
}
спасибо за этот полезный ответ, но предназначена ли эта часть //<-- 0 refers to value in column a (A=0 B=1 C=2 etc) It also checks here column C for if it has "Sent" in it
для упоминания ценности? в моем случае я хочу, чтобы вся строка/строки были вставлены
тоже получаю TypeError: Cannot read property 'getDataRange' of null (line 4, file "Code")
Вам нужно будет изменить имя листа с «Лист1». Чтобы сделать всю строку, если вы измените var bodyVal
на sh.getRange(i+1,1,1,2).getValues();
- это вставит всю строку в электронное письмо с каждой ячейкой, разделенной запятой. Вы можете изменить последнее число (2) на количество столбцов, которые вы хотите включить.
Вы ищете триггер, который будет активирован при вставке новой строки.
Sheet1
будет вставлена новая строка. Смело меняйте название листа: sh.getName()=='Sheet1'
.function sendEmailRow(e) {
const sh = e.source.getActiveSheet();
if (sh.getName()=='Sheet1' && e.changeType === 'INSERT_ROW') {
MailApp.sendEmail({
to: "[email protected]",
subject: "A new row has been added",
body: "New row!"
});
}
}
Вам нужно создать устанавливаемый триггер onChange
для sendEmailRow
:
Sheet1
, вы отправите электронное письмо выбранному получателю.Большое спасибо @Marios, но я получаю TypeError: Cannot read property 'source' of undefined (line 2, file "Code")
@αԋɱҽԃαмєяιcαη Прочтите еще раз инструкцию по установке. Я не говорил выполнять его вручную. Я сказал скопировать и сохранить его, а затем создать для него устанавливаемый триггер, как я описываю на картинках. Тогда вам просто нужно вставить новую строку в Sheet1
. Пожалуйста, внимательно прочитайте инструкции. Дело об этом. Это триггерная функция. Вы должны получать уведомления, когда что-то меняется в вашем листе (в этом случае строка была вставлена). Не имеет смысла выполнять его вручную.
я извиняюсь за это. Спасибо. сейчас добавлю и попробую. большое спасибо
@αԋɱҽԃαмєяιcαη вам не нужно извиняться :) извините, если это выглядело невежливо :) я не хотел.
спасибо Мариос. это работает, но я не получил строку в виде тела в электронном письме. но все в порядке, ты мне очень помог
@αԋɱҽԃαмєяιcαη Я не работаю в Google :), но работаю с разными продуктами Google :)
Имейте в виду, что предоставленные решения не работают, если вставка строки не выполняется реальным пользователем. Вставки, выполняемые сценариями, не генерируют триггеры.