둘러 보았지만 조각이 있지만 퍼즐을 함께 넣을 수는 없습니다. 매일 실행되도록 구성된 트리거에서 실행되는 스크립트를 만들려고합니다. 편집기의 리소스 옵션 아래에서 트리거가 설정됩니다.Google Apps Script - 셀에있는 날짜를 기준으로 이메일 보내기
기본적으로 나는 셀 범위를 캡처하는 스크립트를 찾고, 기한 내에 날짜가 표시되고 현재 날짜와 일치하는지 확인합니다. 일치하면 이메일을 보내십시오. 스프레드 시트 자습서에서 Google에 이메일을 보내 시작했습니다. 날짜를 확인하기 위해 if 문을 추가했지만 dataRange와 비교하여 날짜를 잃어 버리고 있습니다. 누구든지 이러한 문제를 해결하거나 연구 방향을 알려줄 수 있습니다.
스크립트가 실행되는 것처럼 보이지만 아무 것도 나타나지 않습니다. "if (currentTime == dataRange)"dataRange가 올바르게 일치하지 않기 때문입니다.
function sendEmails() {
var sheet = SpreadsheetApp.getActiveSheet();
var startRow = 2; // First row of data to process
var numRows = 50; // Number of rows to process
// Fetch the range of cells
var dataRange = sheet.getRange(startRow, 1, numRows, 2)
// Fetch values for each row in the Range.
var data = dataRange.getValues();
//Get todays date
var currentTime = new Date();
var month = currentTime.getMonth() + 1;
var day = currentTime.getDate();
var year = currentTime.getFullYear();
//Test column for date due & match to current date
if (currentTime == dataRange) {
for (i in data) {
var row = data[i];
var emailAddress = row[0]; // First column
var message = row[1]; // Second column
var subject = "Task Item Due";
MailApp.sendEmail(emailAddress, subject, message);
}
}
}
내가 Srik에서 제공하는 제안을 업데이트하고 아래 코드에서 자신의 제안을 제공 해요 : 여기
는 코드입니다. 나는 몇 시간을 게시하려고 시도했기 때문에 왜 과거의 동료 리뷰를하지 않았는 지 잘 모르겠다.function sendEmail() {
var sheet = SpreadsheetApp.getActiveSheet();
var startRow = 2; // First row of data to process
var numRows = 50; // Number of rows to process
var dataRange = sheet.getRange(startRow, 1, numRows, 50);
// Fetch values for each row in the Range.
var data = dataRange.getValues();
//Browser.msgBox(data)
for (i in data) {
var row = data[i];
var date = new Date();
var sheetDate = new Date(row[1]);
if (date.getDate() == sheetDate.getDate() && date.getMonth() == sheetDate.getMonth() && date.getFullYear() == sheetDate.getFullYear());
{
var emailAddress = row[0]; // First column
var message = row[2]; // Second column
var subject = "Sending emails from a Spreadsheet";
MailApp.sendEmail(emailAddress, subject, message);
// Browser.msgBox(emailAddress)
}
}
}
코드가 실행되는 것으로 나타나지만 스크립트 편집기에서 다음 오류가 발생합니다. "이메일을 보내지 못했습니다. 수신자가 없습니다 (23 행)". 하지만 여전히 이메일을 보냅니다. 그것은 날짜를 비교하고 날짜가 일치하는 경우에만 이메일을 보내야합니다. 모든 행에 대해 이메일을 보냅니다. 스프레드 시트를 공유하여 코드와 스프레드 시트 설정 방법을 확인했습니다. Shared Spreadsheet
로거 및 Utilities.formatDate의 업데이트 된 코드 W/SERGE 도움말 .. 감사합니다 !!
function sendEmail() {
var sheet = SpreadsheetApp.getActiveSheet();
var startRow = 2; // First row of data to process
var numRows = sheet.getLastRow()-1; // Number of rows to process
// Fetch the range of cells A2:B3
var dataRange = sheet.getRange(startRow, 1, numRows, sheet.getLastColumn());
// Fetch values for each row in the Range.
var data = dataRange.getValues();
//Logger.log(data)
for (i in data) {
var row = data[i];
var date = new Date();
date.setHours(0);
date.setMinutes(0);
date.setSeconds(0);
//Logger.log(date);
var sheetDate = new Date(row[2]);
//Logger.log(sheetDate);
var Sdate = Utilities.formatDate(date,'GMT+0200','yyyy:MM:dd')
var SsheetDate = Utilities.formatDate(sheetDate,'GMT+0200', 'yyyy:MM:dd')
Logger.log(Sdate+' =? '+SsheetDate)
if (Sdate == SsheetDate){
var emailAddress = row[0]; // First column
var message = row[1]; // Second column
var subject = "Your assigned task is due today." +message;
MailApp.sendEmail(emailAddress, subject, message);
//Logger.log('SENT :'+emailAddress+' '+subject+' '+message)
}
}
}
좋습니다 .. 진행되고있는 것 같습니다 .. 로거를 사용 주셔서 감사합니다 .. 당신이 눈치 챘을 경우 Browswer.msgBox comments 나는 약간 자신을 디버깅하려고했다. 로깅이 훨씬 낫습니다. 현재 날짜가 하루 전에 표시되는 것처럼 보입니다. 6/17/2012 ?? 로그에이를 출력하므로 2012 : 06 : 17 =? 2012 년 6 월 15 일 : 실제 날짜가 아닌 내일에 대한 날짜를 가져 오는 이유는 확실하지 않습니다. 파고가 시작되면서 업데이트 될 것입니다. – jjones312
잘 작동하는지, 확실하지 않습니까? 현재 스프레드 시트에서 가져온 날짜와 일치하는 .setHours, .setMinutes 및 setSeconds를 현재 날짜에 사용했습니다. 이메일 흐름이 바로 :) 저에게 나를 도와 주신 Serge에게 감사드립니다. 누군가가 .setHOurs 등의 추가 방법을 생각하면 알려주세요. Javascript는 새로운 것이므로 내가 할 수있는 것을 흡수하려고 노력하고 있습니다. 다시 감사합니다 .. – jjones312
문제는 아마도 시간대와 관련되어 있으며, GMT + 0200을 사용했지만 나에게는 적합하지만 아마도 당신에게는 적합하지 않은 것입니다.) 스프레드 시트의 설정도 확인하십시오. (GAS의 날짜에 대한 정보는 이전 포럼에서 확인하십시오) –