目的:从工作表中提取日期和时间(由填充的Google表单创建),并使用脚本自动设置在电子邮件正文中使用它们。 脚本编辑器代码:
function sendEmails() {
var sheet = SpreadsheetApp.getActiveSheet();
var startRow = 16; // First row of data to process
var numRows = 1; // Number of rows to process
for( var j=startRow; j<startRow + numRows; j++)
{
var color = sheet.getRange(j, 10).getBackground();
if("#00ff00"==color)
{
// Fetch the range of cells A2:B3
var row = sheet.getSheetValues(j, 1, 1, 14); //extract j th row till 14/Nth col
var nameStudent = row[0][0] +" "+row[0][1];
var time = row[0][6]+" on ";// +row[0][7]+" at "+row[0][8];
var nameRecipient="Dear "+row[0][9]+",";
var emailRecipient=row[0][13];
var subject= "Date and time "+row[0][5]+" at "+row[0][6];
var message=nameRecipient+sheet.getRange("L11").getValue()+nameStudent+sheet.getRange("M11").getValue()+time+nameStudent+sheet.getRange("N11").getValue();
MailApp.sendEmail(emailRecipient, subject, message);
sheet.getRange(j,10).setBackground("#ff9900");
}
}
}
在输出(即电子邮件)中:
日期由填写Google表单的人输入。 我正在访问使用表单创建的Google表格。工作表的屏幕截图: https://drive.google.com/file/d/0B2hiq6P5ceD-aUZQTDBVUXJYbEk/edit?usp=sharing 单元格(双击时)打开上面链接屏幕截图中显示的日历。 我使用以下代码(使用Google Apps脚本)从工作表中获取一行:
var row = sheet.getSheetValues(j, 1, 1, 14); //extract j th row till 14/Nth col
在调试器中,日期如下:
[["Gaaav", "Budapest","de@erta.com", 9823527827, "San Francisco International Airport(SFO)", 41855, 0.5277777777810115,"Si016", "Al02", "Yaar", "pr", "3112", 94984802569, "jklfasj@kljsafkl.com"]]
在上面的陈述中,编号41855是日期。它实际上是8/4/2014。但我无法读懂它。我也不能读取时间,在上面的调试o / p中,它是0.5277777777810115。
我附上了调试屏幕的截图:
https://drive.google.com/file/d/0B2hiq6P5ceD-aFlDd2g4SlM5MW8/edit?usp=sharing
答案 0 :(得分:1)
假设您的提交时间是电子表格中的第14行。
将日期和时间值转换为Javascript日期对象,然后使用表单中时间对象的小时和分钟更新表单中的日期对象。
function sendEmails() {
var sheet = SpreadsheetApp.getActiveSheet();
var startRow = 16; // First row of data to process
var numRows = 1; // Number of rows to process
for( var j=startRow; j<startRow + numRows; j++)
{
var color = sheet.getRange(j, 10).getBackground();
if("#00ff00"==color)
{
// Fetch the range of cells A2:B3
var row = sheet.getSheetValues(j, 1, 1, 14); //extract j th row till 14/Nth col
var nameStudent = row[0][0] +" "+row[0][1];
var time = row[0][6]+" on ";// +row[0][7]+" at "+row[0][8];
var nameRecipient="Dear "+row[0][9]+",";
var emailRecipient=row[0][13];
// build out the date time object
var dateInput = new Date(row[0][5]);
var timeInput = new Date(row[0][6]);
dateInput.setHours(timeInput.getHours())
dateInput.setMinutes(timeInput.getMinutes());
// format the date/time object into a string
var dateString = Utilities.formatDate(dateInput, Session.getScriptTimeZone(), "MM/dd/yyyy hh:mm a");
var subject= "Date and time "+ dateString
var message=nameRecipient+sheet.getRange("L11").getValue()+nameStudent+sheet.getRange("M11").getValue()+time+nameStudent+sheet.getRange("N11").getValue();
MailApp.sendEmail(emailRecipient, subject, message);
sheet.getRange(j,10).setBackground("#ff9900");
}
} }
答案 1 :(得分:1)
您在电子表格中看到的值是没有格式化的日期,您可以通过选择适当的格式在电子表格用户界面中轻松更改该值:41855
列的日期,它将变为4-Aug-2014
并且0.5277777777810115
列中显示12:40:00
的时间。
这些数字是电子表格中日期的原生值。天数从1899年12月30日起计算,如果您在此参考中添加41855天,您将获得2014年8月4日!就这么简单; - )
时间是小时 - 分钟 - 秒的十进制表示(24小时制的百分比,这里是十进制的12.666666667小时,这实际上对应于12:40:00 :-),以便它可以添加到整数部分并提供完整的日期信息。
一旦你在SS中正确设置了格式,脚本就会将其作为日期对象读取。我建议你将它们组合在一个单元格中以使脚本更简单:用{{1创建一个新列例如,如果C和D是列。
见下图:
根据您的评论,我使用以下代码对您的SS副本进行了测试:
=C2+D2
我将SS的显示格式设置为列F的function getDatesAndTime() {
var sh = SpreadsheetApp.getActive().getSheets()[1];
var dates = sh.getRange('F2:F').getValues();
var hours = sh.getRange('G2:G').getValues();
var complete = sh.getRange('H2:H').getValues();
Logger.log(dates[0][0]);
Logger.log(hours[0][0]);
Logger.log(complete[0][0]);
}
,列G的date
和列H的Time
,其中我使用公式date+time
< / p>
这可以通过脚本完成(在=F2+G2
之前插入):
getValues()
包含修改的工作表为here(仅查看,复制以进行编辑),以下是记录器结果
请务必检查电子表格和脚本中的时区设置是否相同(测试表和我的太平洋时间!) 您在记录器中看到的小时差异来自夏令时的问题......已完全解释in this other post