繁体   English   中英

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

[英]Cannot get date from google sheet filled by google forms

目的:从工作表(由填充的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是日期。 实际上是2014年8月4日。 但是我听不懂。 我也无法读取时间,在上述调试操作中,时间为0.5277777777810115。

我附上调试屏幕的屏幕截图:

https://drive.google.com/file/d/0B2hiq6P5ceD-aFlDd2g4SlM5MW8/edit?usp=sharing

假设您的时间提交在电子表格中的第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");
}

}}

您在电子表格中看到的值是没有格式的日期,您可以通过选择适当的格式在电子表格用户界面本身中轻松地进行更改:日期为41855日期,它将变为4-Aug-2014 ,时间为0.5277777777810115将显示12:40:00

这些数字是电子表格中日期的原始值。 从1899年12月30日开始计算天数,如果在此引用中加上41855天,则将获得2014年8月4日! 就如此容易 ;-)

时间是小时-分钟-秒的十进制表示形式(一天中24小时的百分比,此处为十进制的12.666666667小时,实际上对应于12:40:00 :-),因此可以将其添加到整数部分并提供完整的日期信息。

一旦您在SS中正确设置了格式,脚本就会将其读取为日期对象。建议您将两者合并在一个单元格中,以简化脚本:如果C,则使用=C2+D2创建新列和D是例如列。

参见下图:

在此处输入图片说明


编辑

在您发表评论之后,我使用以下代码对您的SS副本进行了测试:

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]);
}

我的SS的显示格式设置为date为F列, Time列G和date+time为H列中,我使用的公式=F2+G2

这可以使用脚本以及类似的方法(在getValues()之前插入)来完成:

  sh.getRange('F2:F').setNumberFormat('MM dd yyyy');
  sh.getRange('G2:G').setNumberFormat('HH:mm');
  sh.getRange('H2:H').setNumberFormat('MM dd yyyy HH:mm');

修改后的工作表在这里 (仅查看​​,进行复制以进行编辑),下面是记录器的结果

在此处输入图片说明

注意 :

确保检查电子表格和脚本中的时区设置是否相同(测试表和我的作业中的太平洋时间!)在记录器中看到的时差来自夏令时问题...已充分说明在另一篇文章中

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM