如何使用谷歌应用程序脚本查找任务列表中特定日期的任务

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用谷歌应用程序脚本查找任务列表中特定日期的任务相关的知识,希望对你有一定的参考价值。

我正在使用已安装的Google表格编辑触发器来创建Google Tasks。但是,如果编辑包含已作为任务创建的任务的行,则会在同一天创建重复的任务。

我想找到给定列表中具有特定截止日期的所有任务。然后我将能够检查他们的标题,与要创建的任务的标题进行比较,因此脚本可以决定是创建新任务还是更新现有任务。

这是我当前触发的代码:

function addTask(event){
  if (spreadsheet.getActiveSheet().getName() === "Task List") {
    var RowNum = event.range.getRow();
    var taskproperties = spreadsheet.getActiveSheet().getRange(RowNum, 1, 1, 5).getValues();

    var Title = taskproperties[0][1];
    var Frequency = taskproperties[0][2];
    var StartDate = taskproperties[0][3];
    var Recurrence = taskproperties[0][4];
    if (Title.trim().length !== 0 && Frequency.trim().length !== 0 &&
        StartDate.toString().trim().length !== 0 && Recurrence.toString().trim().length !== 0)
    {
      //Code to Create a new task
      //Code Get the task date                              
      //Some codes to set Date parameters for use in script functions
      //Some codes to set Date parameters for use in sheet functions
      //Set the task parameters
      //add task to list
      //--------------------------------------------------------------

      //Assign a cell in the spreadsheet for calculation of new dates for recurring task            
      var tempdatecell= spreadsheet.getSheetByName("Task List").getRange("F1")

      //Insert new tasks based on the number of recurrence
      for (i = 1; i < Recurrence; i++) {
        //Insert a formula in a cell the spreadsheet to calculate the new task date
        tempdatecell.setFormula('=WORKDAY.INTL("' + shTaskStartDate + '",' + i + '*VLOOKUP("' + Frequency + '",tasktype,2,false),"1000011")')

        //Get task date from the cell                  
        TaskDate = tempdatecell.getValue()

        //Date parameters for use in script functions                  
        var TaskDate = new Date(TaskDate);
        var taskmonth = Number(TaskDate.getMonth()) 
        var taskDay = TaskDate.getDate() + 1
        var taskyear = TaskDate.getYear()

        //Create a new task
        var task = Tasks.newTask();

        //Set the task parameters
        task.title = Title;
        task.due = new Date(taskyear, taskmonth, taskDay).toISOString()

        //add task to list
        task = Tasks.Tasks.insert(task, tasklistID);
      }

      tempdatecell.clearContent()
    }
  }  
}
答案

您可以考虑让脚本写入指示任务状态的另一个单元格(可能在另一列中),例如添加或更新,然后写入条件语句,检查该单元格以确定如何处理它。这是一个非常模糊的答案,但正如Tanaike在他们的评论中所说的“提供你当前的剧本”或它的通用版本,我们可以提供更大的帮助。

另一答案

我设法找到了一个涉及过滤整个任务列表的工作。它似乎可以找到我现在拥有的少数任务。我不确定它将如何执行大量的任务。任何进一步的贡献欢迎

我在解决方法中使用的代码如下所示,并替换下面的行//在我的原始代码中创建一个新任务: -

  //Check if the task exist for the task date

  var listoftasks = Tasks.Tasks.list(tasklistID)

  var filtermonth="0" + shTaskStartMonth

  var filterdate=scTaskStartYear + "-" + filtermonth.substr(filtermonth.length-2) + "-" + shTaskStartDay + "T00:00:00.000Z"

  var filteredtask=listoftasks["items"].filter(function(item){

      return item["due"]== filterdate && item["title"]===Title

    })

    if(filteredtask.length==0){

        //Create a new task
        var task = Tasks.newTask()

        //Set the task parameters
        task.title = Title;
        task.due=new Date(scTaskStartYear,scTaskStartMonth,scTaskStartDay).toISOString()

        //add task to list
        task = Tasks.Tasks.insert(task, tasklistID)

    }

    else{

        //Get the existing task
        task = Tasks.Tasks.get(tasklistID, filteredtask[0].id)

        task.setStatus("completed")
    }

注意: - setStatus没有按预期工作,但我会为此发布一个单独的问题。

以上是关于如何使用谷歌应用程序脚本查找任务列表中特定日期的任务的主要内容,如果未能解决你的问题,请参考以下文章

在python中执行特定日期和时间的任务[复制]

如何在特定日期间隔内查找

如何在特定日期之后阻止Fullcalendar中的日期

将公式应用于单元格下拉列表的脚本

获取在特定日期创建和/或修改的存储过程列表?

如何从 Swift 中特定工作日的日期范围中查找日期?