无法从google表单填写的Google工作表中获取日期

时间:2014-07-27 17:06:37

标签: google-apps-script google-sheets google-form

目的:从工作表中提取日期和时间(由填充的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

2 个答案:

答案 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是列。

见下图:

enter image description here


修改

根据您的评论,我使用以下代码对您的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(仅查看,复制以进行编辑),以下是记录器结果

enter image description here

注意:

请务必检查电子表格和脚本中的时区设置是否相同(测试表和我的太平洋时间!) 您在记录器中看到的小时差异来自夏令时的问题......已完全解释in this other post