如果新日期是今天的日期,如何使用 Google Sheet 的应用程序脚本将 90 天添加到用户输入的日期和电子邮件中
How to use Google Sheet's app script to add 90 days to user inputted date and email if new date is today's date
如何在 google sheet 秒内获取日期以在用户输入日期后 90 天自动生成。所以,我有两列,在 J 列中,我将输入我第一次拜访患者的日期。然后在 K 列中,日期应在第一次访问后自动填充 90 天。但是这第二个日期必须自动填充,一旦我们到了这个日期,脚本应该会自动发送一封电子邮件。我试图通过使用 google sheet 本身来走简单的方法,但问题是一旦你删除一行,整个列的公式就会被删除。
在问这个问题之前,我试着看看这个其他的解决方案:How to add days to a date from Google Sheets?
但我还是有点迷茫。
现在,我也知道 google sheets 本身有一个名为 TODAY() 的函数,我也试过了。但这就是问题所在,如果 someone/a 用户删除了一行,那么我的 TODAY() 公式将在其余行中丢失。这就是为什么我需要在 App 脚本中执行此操作。谁能帮我解决这个问题?到目前为止,我有以下代码。
function DateCompare() {
const ss = SpreadsheetApp.getActiveSheet();
const dataRange = ss.getDataRange();
const dataRangeVals = dataRange.getValues();
const headers = 2;
var getNewDate = new Date();
var getDate = new Date().getDate();
var getMonth = new Date().getMonth()+1;
var getYear = new Date().getFullYear();
var dateGlued = getMonth + "/" + getDate + "/" + getYear;
for(n=2;n<dataRangeVals.length;++n){
var cell = dataRangeVals[n][10]; // x is the index of the column starting from 0
var formattedDate = Utilities.formatDate(new Date(cell), "GMT", "MM/dd/YYYY");
if (dateGlued.valueOf() === formattedDate.valueOf()) {
Logger.log("Date Matched!")
}
}
}
function ifItsBeen90Days() {
const ss = SpreadsheetApp.getActiveSheet();
const dataRange = ss.getDataRange();
const dataRangeVals = dataRange.getValues();
const headers = 2;
dataValues
.filter(row => row[10] !== '' && row[11] !== "") //filtered data where row[9] is empty
.forEach(row => {
let message =
row[0] +
'\n' +
row[1] +
'\n' +
row[2] +
'\n' +
row[3] +
'\n' +
row[4] +
'\n' +
row[5];
let email = row[13];
let subject = 'Sending emails from a Spreadsheet';
MailApp.sendEmail(email, subject, message);
Logger.log(`${subject}: ${message} sent to ${email}`);
});
}
当您可以简单地使用公式来检查所需的条件时,为什么要使用 GAS。标准(基于图像)是:
- 在 J 列中输入的日期后 90 天
因此该公式等同于以下内容,只需确保将列格式设置为日期。
=IF(ISDATE(J2); J2+90; "")
现在我们已经设置好日期了。
然后为了在计算出的日期自动发送电子邮件,您需要每天 运行 触发一次。然后该触发器 运行 是一个特定的函数,该函数随后将检查是否有任何行包含今天的日期。如果是,则发送电子邮件,如果否,则不发送。最佳做法是将 activity 记录到 sheet,这样您就可以看到它已发送的确认信息。
如何在 google sheet 秒内获取日期以在用户输入日期后 90 天自动生成。所以,我有两列,在 J 列中,我将输入我第一次拜访患者的日期。然后在 K 列中,日期应在第一次访问后自动填充 90 天。但是这第二个日期必须自动填充,一旦我们到了这个日期,脚本应该会自动发送一封电子邮件。我试图通过使用 google sheet 本身来走简单的方法,但问题是一旦你删除一行,整个列的公式就会被删除。
在问这个问题之前,我试着看看这个其他的解决方案:How to add days to a date from Google Sheets? 但我还是有点迷茫。
现在,我也知道 google sheets 本身有一个名为 TODAY() 的函数,我也试过了。但这就是问题所在,如果 someone/a 用户删除了一行,那么我的 TODAY() 公式将在其余行中丢失。这就是为什么我需要在 App 脚本中执行此操作。谁能帮我解决这个问题?到目前为止,我有以下代码。
function DateCompare() {
const ss = SpreadsheetApp.getActiveSheet();
const dataRange = ss.getDataRange();
const dataRangeVals = dataRange.getValues();
const headers = 2;
var getNewDate = new Date();
var getDate = new Date().getDate();
var getMonth = new Date().getMonth()+1;
var getYear = new Date().getFullYear();
var dateGlued = getMonth + "/" + getDate + "/" + getYear;
for(n=2;n<dataRangeVals.length;++n){
var cell = dataRangeVals[n][10]; // x is the index of the column starting from 0
var formattedDate = Utilities.formatDate(new Date(cell), "GMT", "MM/dd/YYYY");
if (dateGlued.valueOf() === formattedDate.valueOf()) {
Logger.log("Date Matched!")
}
}
}
function ifItsBeen90Days() {
const ss = SpreadsheetApp.getActiveSheet();
const dataRange = ss.getDataRange();
const dataRangeVals = dataRange.getValues();
const headers = 2;
dataValues
.filter(row => row[10] !== '' && row[11] !== "") //filtered data where row[9] is empty
.forEach(row => {
let message =
row[0] +
'\n' +
row[1] +
'\n' +
row[2] +
'\n' +
row[3] +
'\n' +
row[4] +
'\n' +
row[5];
let email = row[13];
let subject = 'Sending emails from a Spreadsheet';
MailApp.sendEmail(email, subject, message);
Logger.log(`${subject}: ${message} sent to ${email}`);
});
}
当您可以简单地使用公式来检查所需的条件时,为什么要使用 GAS。标准(基于图像)是:
- 在 J 列中输入的日期后 90 天
因此该公式等同于以下内容,只需确保将列格式设置为日期。
=IF(ISDATE(J2); J2+90; "")
现在我们已经设置好日期了。
然后为了在计算出的日期自动发送电子邮件,您需要每天 运行 触发一次。然后该触发器 运行 是一个特定的函数,该函数随后将检查是否有任何行包含今天的日期。如果是,则发送电子邮件,如果否,则不发送。最佳做法是将 activity 记录到 sheet,这样您就可以看到它已发送的确认信息。