#google-apps-script #google-sheets
#google-apps-script #google-таблицы
Вопрос:
Я пытаюсь собрать скрипт для одного из наших пользователей и ничего не добиваюсь быстро. В настоящее время у них есть кнопка в верхней части их электронной таблицы Google, при нажатии на которую другой пользователь отправляет электронное письмо с просьбой проверить электронную таблицу. Существует столбец флажков (столбец K), который второй пользователь просматривает в поисках флажка, получает необходимую информацию и затем снимает флажок. Проблема в том, что они получают около 600 строк, что может занять много времени, чтобы найти отмеченные поля / поля, поскольку любой из них может быть проверен (обычно только 1 или 2 из них меняются одновременно). Моя идея состояла бы в том, чтобы поместить строку всех флажков либо в тему, либо в сообщение отправленного электронного письма. Я пытался найти похожие скрипты в Интернете, чтобы разобраться, чтобы заставить это работать, но пока не нашел ничего, что могло бы это сделать. Я не знаком с Google scripting, поскольку я не часто им пользуюсь, но хотел попытаться помочь этому пользователю. Ниже приведен очень простой скрипт, который запускается при нажатии кнопки для отправки электронной почты второму пользователю. Любая помощь будет высоко оценена.
var sheet = SpreadsheetApp.getActiveSheet();
var emailAddress = "users@email.com"
var message = "*Link to spreadsheet second user needs to check*"
var subject = "New Job Tickets Entered";\I would like the row of the checked back to be in the subject of the email sent if possible.
MailApp.sendEmail(emailAddress, subject, message);
Browser.msgBox('Emails sent to user');
}
Ответ №1:
function sendChecked() {
const ss=SpreadsheetApp.getActive();
const sh=ss.getActiveSheet();
const startRow=2;
const subject="Checked Rows"
const recipient="users@email.com";
let n=0;
let body='These are the rows that were checked'
let html='These are the rows that were checked';
const cbs=sh.getRange(startRow,1,sh.getLastRow()-startRow 1,sh.getLastColumn()).getValues();
cbs.forEach((r,i)=>{
if(r[10]==true) {
html ='<br />' r[12];//just send column M
body ='n' r[12];
sh.getRange(i startRow,11).setValue(false);
n ;
}
});
if(n)GmailApp.sendEmail(recipient,subject,body,{htmlBody:html})
}
Комментарии:
1. Вывод в электронном письме направлен на поиск нужной строки, но просто сбрасывает все значения ячеек из указанной строки. Спасибо, что помогли мне стать намного ближе. Ниже, если я получу результат.
true,Mon Jan 04 2021 00:00:00 GMT-0500 (Eastern Standard Time),DS,false,12564,01 CANTON,,Fri Jan 01 2021 00:00:00 GMT-0500 (Eastern Standard Time),PLACE 171,link,true,,2,,,,,,(The commas continue a few hundred times.)
2. Я посмотрю, как это сделать. Если я смогу отделить столбец «M» (это столбец для номеров заданий) и удалить лишние запятые, я смогу выполнить эту работу. Спасибо за всю вашу помощь.
3. Я смог удалить запятые, но мне все еще трудно понять, как изолировать столбец с помощью метода .map.
4. Итак, насколько я понимаю, вам просто нужен столбец M из каждой строки. Это правильно?
5. Хорошо, это должно сработать, и, пожалуйста, обратите внимание, что в первой версии у меня была ошибка, поэтому возьмите весь скрипт. У меня был последний параметр в getRange() как getLastRow(), когда он должен был быть getLastColumn(), и вы могли бы взять меньше данных, если бы захотели, а затем изменить индексы, но я просто выбрал простой выход.