簡體   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