javascript - 使用脚本应用程序从 Google Sheet 中的单元格中提取日期

标签 javascript loops google-apps-script google-sheets

作为免责声明,我对编程概念相当陌生。如果你真的想成为我最好的 friend ,解释得越具体越好。但如有任何帮助,我们将不胜感激。

我的小型企业使用 QuickBooks 进行薪资计时,但出于后勤目的,我们让员工使用 Google 电子表格来输入他们的时间。

我想编写一个脚本,每天两次检查第一列的日期(根据我设置的触发器)。如果日期等于或大于今天的日期,我需要脚本还检查同一行中几列下方的单元格,以查看该单元格是否已填写。如果是0或者null,我想发送一个通知。

请参阅下图以供引用。

Test

到目前为止,这就是我所拥有的:

function values2() 
{
    var ss = SpreadsheetApp.getActiveSpreadsheet(),
      sheet = ss.getSheetByName("TimeSheet"),
      range = sheet.getDataRange(),
      values = range.getValues(),
      indx, logToday, today, body,
      recipients = "xxxxx@xxx.zzz",
      subject = "Timesheet Notification" + ss.getName();

//Finds current date and creates string. I would prefer to have a numeric value associated to the current date, as well as a numeric value associated with the date for each row.
  var CurrentDate = new Date();
  Logger.log(CurrentDate);
      logToday = Logger.getLog();
      indx = logToday.indexOf("INFO");
      today = logToday.substring(indx + 6, indx + 16);

//I'm having things sent to my email for test purposes
  MailApp.sendEmail(recipients, subject, today);  
//Clears Log
  Logger.clear();
  for (var r=1; r<values.length; r++) 
  {
  var row = values[r],
      date = row[0],
      price = row[1],
      units = row[2],
      total = row[3],
      name = row[4];

   Logger.log(date);  
   Logger.log(price);
   Logger.log(units),
   Logger.log(total),
   Logger.log(name);
  }

  body = Logger.getLog();
  MailApp.sendEmail(recipients, subject, body);
}

此时,我希望能够捕获第一列中的每个日期,将其与今天的日期进行比较,检查同一行中的另一个单元格,然后转到第一列中的下一个日期。我尝试过 IF/Else 语句,但无济于事。

最佳答案

如果您想将包含空单元格的第一列的日期元素与今天进行比较,以下脚本怎么样?

function values2() 
{
    var ss = SpreadsheetApp.getActiveSpreadsheet(),
      sheet = ss.getSheetByName("TimeSheet"),
      range = sheet.getDataRange(),
      values = range.getValues(),
      indx, logToday, today, body,
      recipients = "xxxxx@xxx.zzz",
      subject = "Timesheet Notification" + ss.getName();

    var lR = sheet.getLastRow();
    var dateinfo = sheet.getRange('a1').offset(0, 0, lR, 1).getValues();
    var today = new Date();
    var y0 = today.getFullYear();
    var m0 = today.getMonth() + 1;
    var d0 = today.getDate();

    for (var i=0; i<dateinfo.length; i++){
        x = Date.parse(dateinfo[i]);
        var date = new Date(x);
        var y = date.getFullYear();
        var m = date.getMonth() + 1;
        var d = date.getDate();
        if (y0 === y && m0 === m && d0 === d) {
            Logger.log("ok:" + i) // same date
        } else {
            Logger.log("error:" + i)  // difference date
        };
    };
}

关于javascript - 使用脚本应用程序从 Google Sheet 中的单元格中提取日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40532159/

相关文章:

python - 不要进入 for 循环中的下一次迭代

jquery - 可以将 URL 添加到 jQuery 数组并对其进行一些检查

javascript - 以不同的速率循环遍历数组

google-apps-script - 谷歌应用脚​​本: comparing dates

javascript - 当组件重新渲染时,它内部的所有变量都会重新定义吗?

javascript - 使用通过 EditText 获取的变量将 javascript 命令发送到 Webview

javascript - 在继续下一项之前,如何在 for 循环中为一项运行函数?

java - 如何使用逻辑迭代对象列表:iterate and display each object property values in jsp?

google-apps-script - Google Apps 脚本 - 如何在 onFormSubmit (Google Forms 事件)中获取目标电子表格中的相应记录?

javascript - 使用 for-in 迭代对象时是否需要检查 hasOwnProperty