时间驱动的触发(每天)不是每天触发

Boštjan

我有类似的问题,如如何确保运行每日时间触发器中所述。

我在一张Google工作表中有一个特定的脚本,每天触发一次(时间驱动,应该每天早晨触发,通过界面设置,而不是通过编程设置)。但是该脚本并非每天都执行。我可以在执行报告中看到这一点,那里只有成功的执行而没有失败的执行。我还可以通过检查工作表中的某个单元格来查看该脚本是否执行,该单元格在脚本运行时会以执行时间戳记进行更新。而且我在触发器设置中为失败的执行设置了立即通知。

在我的特定情况下,脚本应该从11月9日至11月13日每天运行,但仅在11月9日,11月10日,11月12日运行。我没有收到有关执行失败的任何通知。

该脚本本身不使用任何API,这是非常基本的:读取一张工作表中的数据,进行一些计算并写入另一张工作表(谈论单个Google Sheet文件中的工作表)。

如果我手动运行main函数,它将始终有效。

我很高兴得到一些想法可能是错误的。谢谢。

编辑:代码示例(Array.includes的主要功能和原型)

function main(){
  var date = new Date();
  //var date = new Date(2019, 9, 1); // year, month (zero-indexed!!!), day
  //var date = new Date(date.getYear(), date.getMonth()-3); // testing
  var currentDay = Utilities.formatDate(date, "CET", "d");
  Logger.log('currentDate: ' + Utilities.formatDate(date, "CET", "YYYY-MM-dd HH:mm:ss.S") + ' | currentDay: ' + currentDay);

  if (currentDay == 1) {
    Logger.log('currentDay is 1st of the month');
    date = new Date(date.getYear(), date.getMonth() - 1);
    var newCurrentDay = Utilities.formatDate(date, "CET", "d");
  }
  var monthToCheck = Utilities.formatDate(date, "CET", "MMMM").toUpperCase();
  var yearToCheck = Utilities.formatDate(date, "CET", "YYYY");
  Logger.log('dateToCheck: ' + Utilities.formatDate(date, "CET", "YYYY-MM-dd HH:mm:ss.S") + ' | monthToCheck: ' + monthToCheck + ' | yearToCheck: ' + yearToCheck);

  var firstProjectRow = 7;   // first row with the project data
  var firstProjectCol = 1;   // first column with project data - should contain Tool IDs
  var numOfProjectRows = 999;   // num of project rows to check (counted from and including var firstProjectRow)
  var numOfProjectCols = 21;   // num of project columns to check (counted from and including var firstProjectCol the last one contains number of hours for the last service)
  var firstProjectHoursCol = 7;   // first column with data about project hours (usually PM hours)
  // ************* DO NOT EDIT BELOW THIS LINE ************* //

  //return;

  var indexedFirstProjectHoursCol = firstProjectHoursCol - 1;
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  //var sheet = ss.getSheets()[3];
  var sheetName = monthToCheck + ' ' + yearToCheck;
  var sheet = ss.getSheetByName(sheetName);
  Logger.log('sheet: ' + sheetName);
  var range = sheet.getRange(firstProjectRow, firstProjectCol, numOfProjectRows, numOfProjectCols); // getRange(row, column, numRows, numColumns)
  var rangeValues = range.getValues();
  //Logger.log('rangeValues: "' + rangeValues);
  var toolData = new Array();
  var toolIds = new Array();
  var toolHours = new Array();
  //return;

  for (var row in rangeValues) {
    Logger.log('row: "' + row);
    var clientId = rangeValues[row][0];
    var projectId = rangeValues[row][1];
    var hoursSum = 0;

    // we have Tool ID so it's OK to proceed
    if (clientId != "" && projectId != "") {
      var clientProjectId = clientId + "-" + projectId;
      for (var col in rangeValues[row]) {
        var cellValue = rangeValues[row][col];
        //Logger.log('col: ' + col + ' value: ' + value);

        // get hours sum
        if (col >= indexedFirstProjectHoursCol)
          hoursSum += typeof cellValue == 'number' ? cellValue : 0;
      }
      //Logger.log('hoursSum: [' + hoursSum + ']');

      var record = {id: clientProjectId, hours: hoursSum};
      Logger.log("Data: " + record.id + " : " + record.hours);
      // don't yet have a record of clientId-projectId
      if (!toolIds.includes(clientProjectId)) {
        toolData.push(record);
      }
      else {
        recordIdx = toolIds.indexOf(clientProjectId);
        toolData[recordIdx].hours += hoursSum;
      }

      toolIds = [];
      toolHours = [];
      toolData.forEach(function(item) {
        toolIds.push(item.id);
        toolHours.push(item.hours);
      });

    }
    //Logger.log(toolData);
    //Logger.log('ROW DONE!');
  }

  Logger.log('ROWS DONE!');
  Logger.log('toolData.length: ' + toolData.length);
  toolData.forEach(function(item) {
    Logger.log('toolData: ' + item.id + " : " + item.hours);
  });  
  Logger.log('DONE!!!');


  // fill the table in the sheet with assigned number of hours
  fillTheSheet(sheetName, toolData);
}
附加仓库

Apps脚本触发器一直有点挑剔。但是最近它们变得比平时更加​​不可靠(有一些关于虚假触发和其他疾病的报道)。

在这种情况下,可以通过利用外部服务(例如cron-jobs.org)来避免完全使用它们

您必须重构您的应用程序脚本项目,并将其部署为具有功能的公共Web应用程序doPost(e)然后,您需要将Web App的url作为每天调用的Web挂钩端点传递给外部服务。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在给定时间每天触发lambda函数

来自分类Dev

每天特定时间后在Shiny应用中触发代码

来自分类Dev

使用 ACR 通知每天在预定时间触发

来自分类Dev

重置每天设置的UILocationNotification触发日期

来自分类Dev

我想设置每天在不同时间触发的重复警报

来自分类Dev

即使应用关闭,每天在特定时间触发本地通知

来自分类Dev

每天在数组中给定的动态时间自动触发本地通知目标 c ios

来自分类Dev

在特定时间触发 Odoo 的预定操作(例如每天凌晨 1 点至早上 6 点)

来自分类Dev

有没有办法安排Data Factory触发器每天仅在特定时间范围内运行多次,而每天又运行几次?

来自分类Dev

如何每天触发一次功能-目标C

来自分类Dev

.NET中的Cron Job(Quartz.NET)不会每天触发

来自分类Dev

返回每天最早的时间

来自分类Dev

每天计算POSIXlt时间

来自分类Dev

石英cron触发器每天每2周和每天2次(上午6点和下午6点)

来自分类Dev

邮件转发的时间驱动触发器

来自分类Dev

邮件转发的时间驱动触发器

来自分类Dev

本地通知立即触发,而不是计划的时间触发

来自分类Dev

WebAudio:setTargetAtTime()事件立即触发,而不是在计划的时间触发

来自分类Dev

本地通知立即触发,而不是计划的时间触发

来自分类Dev

CRM Dynamics 365中的工作流每天晚上10点触发

来自分类Dev

从每天上午11点开始到每天下午3点结束,每10分钟触发Quartz Scheduler的cronTrigger?

来自分类Dev

时间驱动触发器中的功能参数

来自分类Dev

我有一个 yaml 文件。我需要每天触发网站数据,我该怎么办?

来自分类Dev

如何每天将unix时间分组?

来自分类Dev

与熊猫每天和每月的时间序列合并

来自分类Dev

Pyspark获取每天的最后日期时间

来自分类Dev

UILocalNotification时间表每天直到日期

来自分类Dev

每天在计划的时间自动关闭程序

来自分类Dev

每天在特定时间创建活动

Related 相关文章

  1. 1

    在给定时间每天触发lambda函数

  2. 2

    每天特定时间后在Shiny应用中触发代码

  3. 3

    使用 ACR 通知每天在预定时间触发

  4. 4

    重置每天设置的UILocationNotification触发日期

  5. 5

    我想设置每天在不同时间触发的重复警报

  6. 6

    即使应用关闭,每天在特定时间触发本地通知

  7. 7

    每天在数组中给定的动态时间自动触发本地通知目标 c ios

  8. 8

    在特定时间触发 Odoo 的预定操作(例如每天凌晨 1 点至早上 6 点)

  9. 9

    有没有办法安排Data Factory触发器每天仅在特定时间范围内运行多次,而每天又运行几次?

  10. 10

    如何每天触发一次功能-目标C

  11. 11

    .NET中的Cron Job(Quartz.NET)不会每天触发

  12. 12

    返回每天最早的时间

  13. 13

    每天计算POSIXlt时间

  14. 14

    石英cron触发器每天每2周和每天2次(上午6点和下午6点)

  15. 15

    邮件转发的时间驱动触发器

  16. 16

    邮件转发的时间驱动触发器

  17. 17

    本地通知立即触发,而不是计划的时间触发

  18. 18

    WebAudio:setTargetAtTime()事件立即触发,而不是在计划的时间触发

  19. 19

    本地通知立即触发,而不是计划的时间触发

  20. 20

    CRM Dynamics 365中的工作流每天晚上10点触发

  21. 21

    从每天上午11点开始到每天下午3点结束,每10分钟触发Quartz Scheduler的cronTrigger?

  22. 22

    时间驱动触发器中的功能参数

  23. 23

    我有一个 yaml 文件。我需要每天触发网站数据,我该怎么办?

  24. 24

    如何每天将unix时间分组?

  25. 25

    与熊猫每天和每月的时间序列合并

  26. 26

    Pyspark获取每天的最后日期时间

  27. 27

    UILocalNotification时间表每天直到日期

  28. 28

    每天在计划的时间自动关闭程序

  29. 29

    每天在特定时间创建活动

热门标签

归档