天道酬勤,学无止境

How to create a yearly time-driven trigger?

I'm attempting to create a time-based trigger to execute my incrementCell function once a year on a specified date at 1 AM in perpetuity. When attempting to run below

ScriptApp.newTrigger("incrementCell").timeBased().atDate(2018, 1, 4).atHour(1).everyWeeks(52).create();

I received an "Already chosen a specific date time with at() or atDate()." error.

Interestingly, the line immediately below does not error out:

ScriptApp.newTrigger("incrementCell").timeBased().atDate(2018, 1, 4).create();

评论

Google Apps Script doesn't support yearly triggers but you can use a workaround. Create a monthly trigger that runs on the 1st of every month, and if the month is January, run the actual function.

function createYearlyTrigger() {
  ScriptApp.newTrigger("shouldTriggerRun")
  .timeBased().onMonthDay(1).atHour(1).create();
}

function shouldTriggerRun() {
  var date = new Date();
  if (date.getMonth() === 0) {
    incrementCell();
  }  
}

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • Google Apps 脚本 - 时间驱动的触发器不执行任何 SpreadsheetApp.getUi 函数(Google Apps script - Time-driven trigger not executing any SpreadsheetApp.getUi functions)
    问题 为什么时间驱动的触发器不调用任何SpreadsheetApp.getUi或Browser.xxx()功能是什么? 如果我手动播放该函数,则执行这些行,但使用基于时间的触发器,调用该函数,执行所有其他行,除了对上述任何调用。 我想要一个时间驱动的触发器来根据时间频率集在电子表格上显示警报。 这里有一个简单的代码,以设置为每分钟运行一次的时间驱动触发器为例。 尝试使用其他各种时间设置。 function InputTime() { Logger.log("This code ran"); // This works fine. SpreadsheetApp.getUi().alert("Warning 1"); // Does not work this.SpreadsheetApp.getUi().alert("warning 2"); // Does not work Browser.msgBox("warning 3"); // Does not work } 任何想法? 此外,通过首先获取工作表的 Id 和工作表名称(如 Sergi 此处所建议的)来修改工作表中的值,允许对工作表进行精细编辑。 同样,有没有办法将警报通知与特定电子表格联系起来? 回答1 时间驱动触发器函数无法与 Ui 交互,它们在自己的范围内运行,独立于您的会话。 这是预期的行为,您对此无能为力。
  • Google Apps script - Time-driven trigger not executing any SpreadsheetApp.getUi functions
    Why would Time-Driven triggers not call any ‍‍‍‍SpreadsheetApp.getUi or Browser.xxx(), functions? If I manually play the function, the lines are executed, but with a time based trigger, the function is called, all other lines are executed, except any calls to the above. I wanted a time-driven trigger to display an alert on a spreadsheet based on the time freq set. Here is a simple code, Time-driven trigger set to run every minute as an example. Tried it with various other time settings. function InputTime() { Logger.log("This code ran"); // This works fine. SpreadsheetApp.getUi().alert(
  • 在特定时间锁定Google表格中的单元格(Locking cells in Google Sheets at a specific time)
    问题 我想对Google表格单元格进行编码,以使某些单元格在每天的特定时间自动锁定。 我应该可以编辑它,但是我的协作者不能。 我要如何做到这一点? 在样本表(此处链接)中,您将看到某些日期(15/7 / 2015-17 / 7/2015)。 我想对它进行编码,以便每个日期(例如A1:B6 )每天晚上10点锁定。 回答1 正如@NightShadeQueen所建议的,可以结合使用时间驱动的触发器和“类范围”的protect()方法。 在工作表中打开脚本编辑器(“工具”>“脚本编辑器...” ) 创建锁定范围的代码,可能看起来像这样: 如果您的工作表看起来不像“样本”工作表,则必须修改代码。 特别是lockRanges() -函数,该函数定义应保护的范围。 当前,它以单元格A1开头,并且每次下移7行,直到到达工作表的末尾。 var ss = SpreadsheetApp.getActiveSpreadsheet(); var sheet = ss.getSheetByName('Sheet1'); //INSERT SHEET NAME HERE function lockRanges() { //First cell to lock var row = 1; var col = 1; // Get last row with data in sheet var lastRow =
  • Scheduling Google App Script function for specific recurring windows [duplicate]
    This question already has answers here: How to create a time-driven trigger that runs from 11 am to 2 pm? (2 answers) Closed 3 years ago. I'm trying to schedule an Apps Script function. I need the email to trigger Mon-Sat every 2 hours starting at 11am-9pm. I've written the following code to create triggers for each day: function createTriggers() { var days = [ScriptApp.WeekDay.MONDAY, ScriptApp.WeekDay.TUESDAY, ScriptApp.WeekDay.WEDNESDAY, ScriptApp.WeekDay.THURSDAY, ScriptApp.WeekDay.FRIDAY, ScriptApp.WeekDay.SATURDAY]; for (var i=0; i<days.length; i++) { ScriptApp.newTrigger('emailDashboard
  • Google Apps 脚本基于时间的触发日期和时间(Google Apps Script Time Based Trigger Date and Hour)
    问题 我可以通过资源菜单添加一个时间驱动的触发器以在特定日期和时间手动运行,但我找不到如何以编程方式执行此操作。 我有 .at(date) 方法,但对此我想添加一个特定的时间。 这可能以编程方式吗? 文档中的示例: // Creates a trigger for December 1, 2012 var triggerDay = new Date(2012, 11, 1); ScriptApp.newTrigger("myFunction") .timeBased() .at(triggerDay) .create(); “myFunction”可以在 2012 年 12 月 1 日早上 7 点运行吗? 感谢您的任何帮助。 回答1 日期对象可以在其构造函数中获取时间值。 var d = new Date(year, month, day, hours, minutes, seconds, milliseconds); 触发器将从指定时间开始运行 +- 15 分钟。
  • 如何在 Google 表单中为学校测验添加计时器? [关闭](How to add a timer to Google Forms for a School Quiz? [closed])
    问题 关闭。 这个问题需要更加集中。 它目前不接受答案。 想改善这个问题吗? 更新问题,使其仅通过编辑这篇文章来关注一个问题。 1 年前关闭。 改进这个问题 我们使用 Google 表单进行了英语语言测试,该测试分为 3 个部分。 我们希望能够为每个部分设置时间(例如,A 部分 = 10 分钟,B 部分 = 10 分钟,C 部分 = 40 分钟)。 此外,我们希望学生能够看到他们正在做的每个部分的倒计时,这在谷歌表单中是否可能? 回答1 目前在 Google 表单中没有类似的内容。 您可能需要等待几周,因为有关脚本表单的一些内容将在 google 年度会议 Google I/O 上公布。 请参阅此处:https://developers.google.com/events/io/sessions/327782631 更新:即使过了这么久,脚本中仍然没有可用的内容来回答这个问题。 请检查鲁本回答,其中给出了原因(和一些选项)。 回答2 您可以使用 Timify.me 插件。 它易于使用,看起来也不错。 优点: - 计时器显示在页面顶部 - 触发表单在超时时关闭缺点: - 只有付费版本允许您设置徽标、文本、设计和网络摄像头跟踪 - 您无法自定义时间倒计时部分,倒计时作为一个整体提交注意:您需要使用来自 timify.me 网络应用程序的令牌配置 timify.me 回答3 Google
  • 自动从外部数据库加载Google Spreadsheet数据(Automate Google Spreadsheet data load from external database)
    问题 我有一个共享的Google电子表格。 工作表的某些列必须填充数据库服务器(PostgreSQL)中存在的数据(SQL查询)。 而且,必须安排数据加载自动完成(例如,每天1.00点)。 最后,我需要在电子表格中进行一些调整(例如,在加载后将日期时间放在工作表的名称中或发送确认电子邮件等) 什么是实现这一目标的最佳和最简单的方法? (我开始寻找Google应用程序脚本和Google Sheets API,但不确定哪个更合适) 谢谢 回答1 Apps脚本能够使用Apps Script的JDBC服务连接到外部数据库。 但是,正如此处提到的(阅读最后的评论/文章),要从PostgreSQL数据库读取App脚本,您需要自己实现API层。 关于计划的数据加载:这可以通过使用时间驱动触发器来实现,并且ClockTriggerBuilder类也可能会有所帮助。 关于您要实现的“调整”:这是一个教程,将向您展示如何使用Apps Script发送电子邮件。 根据您的用例和要实现的目标,上述可安装触发器(与时间驱动触发器使用相同的链接)也可以用于发送电子邮件确认以完成数据加载过程。 对于使用日期时间重命名工作表,这应该是一个很好的参考。 因此,可以使用Apps Script实现您打算做的事情,但是在开始之前,建议您彻底阅读一下App Script文档。 回答2
  • Google Apps Script Time Based Trigger Date and Hour
    I can add a time-driven trigger to run on a specific date and time manually via the resources menu, but I cannot find how to do it programatically. I have the .at(date) method, but to this I would like to add a specific time. Is that possible programatically? Example from the documentation: // Creates a trigger for December 1, 2012 var triggerDay = new Date(2012, 11, 1); ScriptApp.newTrigger("myFunction") .timeBased() .at(triggerDay) .create(); Can "myFunction" be run on Decemeber 1, 2012 at 7 am? Thank you for any help.
  • Flink学习笔记(九):flink窗口介绍
    一、概述 在日常生活场景中,我们经常需要获取某一个事件段的数据,如上文所说,希望统计在10点-11点事件段数据的具体情况,那么如何进行处理呢? 如有看过前文(Flink学习笔记(七):flink聚合函数)的小伙伴们可能会记得有一个countWindow,这就是flink给我们提供的算子(窗口,window),使用窗口方法我们可以将数据流分成一个个窗口,然后对窗口内的数据进行处理。 我们先看下flink官网对窗口的描述 windows是处理无限流的核心。 Windows将流分成有限大小的“存储桶”,我们可以在其上应用计算。 本文档重点介绍如何在Flink中执行窗口化,以及程序员如何从其提供的功能中获得最大收益。 窗口式Flink程序的一般结构如下所示。 第一个片段是指键控流,而第二个片段是指非键控流。 可以看到,唯一的区别是对键控流的keyBy(…)调用和对非键控流的window(…)变为windowAll(…)。 Keyed Windows stream .keyBy(...) <- keyed versus non-keyed windows .window(...) <- required: "assigner" [.trigger(...)] <- optional: "trigger" (else default trigger) [.evictor(...)] <-
  • 如何检测何时使用 google-apps-script 脚本在 gmail 中查看电子邮件?(How do I detect when I view an email in gmail with google-apps-script script?)
    问题 每次在 gmail 中查看电子邮件时,我都想触发一个脚本。 有谁知道是否有一个触发器来检测我可以绑定的这个? 我愿意在任何平台上执行此操作,而不仅仅是 google-apps-script。 回答1 简答 目前,Google Apps Script 没有 Gmail 事件的触发器。 解释 在 Google Apps Script 上有三种脚本,bounded、standalone 和 web apps,以及两种触发器,simple 和 installable 脚本只能绑定到文档、表单和电子表格。 可用的简单触发器是: onOpen(e) 1,2,3 onEdit(e) 2 onInstall(e) 4 doGet(e) 5 doPost(e) 5 可用的可安装触发器是: 时间驱动触发器 Google Apps 触发器在打开1,2,3 在编辑2 更改2 在提交表格2,3 应用程序触发 触发器适用于以下“环境”: Google 文档编辑器谷歌表格编辑器 Google 表单编辑器附加组件网络应用程序 注意:在 Google 表单查看器(响应提交)上没有简单的或可安装的。 参考 https://developers.google.com/apps-script/guides/standalone https://developers.google.com/apps-script
  • 通过电子邮件触发Google Apps脚本(Trigger Google Apps Script by email)
    问题 我正在寻找一种模式示例,其中在GoogleAppsForBusiness域中运行的恶魔脚本可以解析传入的电子邮件。 一些消息将包含对另一个GAScript的调用,例如,可以更改特定文档的ACL设置。 我假设其他人已经实现了这种模式,但不确定如何找到示例。 谢谢 回答1 您可以在Apps脚本用户指南和教程中找到脚本示例。 您也可以在论坛上搜索相关讨论。 但是我不认为有一个完全适合您的代码,所有代码都可以肯定地存在,但不能在单个脚本中使用。 有人可能写了这样的脚本而从未发布过。 因为这样做有点简单,而且每个人的用法都不同。 例如,您如何计划标记电子邮件(已阅读,执行的电子邮件等)? 最好使用gmail过滤器来帮助您,将“命令”电子邮件立即放入标签中,而脚本只需删除标签(并可以设置另一个标签)即可。 关键是,看它有什么很大的不同。 另外,我认为将所有功能保留在同一脚本项目中会更容易。 可能只是在不同的文件上。 由于调用不同的脚本要复杂得多。 无论如何,他就是我的起点: //set a time-driven trigger to run this function on the desired frequency function monitorEmails() { var label = GmailApp.getUserLabelByName('command'); var
  • 如何在 Google 电子表格中创建自动清除脚本?(How do I create an Auto-Clear Script in a Google Spreadsheet?)
    问题 我可以使用一些帮助在我的 Google 电子表格中编写脚本。 首先,我不是程序员,充其量也是编写代码或任何脚本的新手。 我想用这个做午餐清单。 背景故事:我创建了 Google 电子表格来充当数字午餐表。 每个老师都有自己的班级电子表格,班级的总数填充了主食堂工作人员的午餐表以供订购。 问题是前一天的旧总数仍然存在。 理想情况下,在新的一天开始时,电子表格上的指定字段将自动清除。 单击此处查看我创建的电子表格示例。 在我的研究中,我发现了一个关于如何创建脚本来执行此操作的线程,但作为单击按钮,将清除指定范围单击此处查看原始帖子。 脚本如下: function clearRange() { //replace 'Sheet1' with your actual sheet name var sheet = SpreadsheetApp.getActive().getSheetByName('Sheet1'); sheet.getRange('C4:I12').clearContent();} 我想要的是有一个脚本,以便每天(比如每天午夜)清除特定的字段/范围。 我不希望列或行删除,因为我不想失去学生姓名或午餐选择。 请,非常感谢任何帮助。 在此先感谢您的帮助,尤其是像我这样的新手。 我期待收到任何人的来信! - 杰森 回答1 按着这些次序... 01. 转到 https:/
  • 强制 IMPORTRANGE 以特定时间间隔更新(Force IMPORTRANGE to update at certain intervals)
    问题 我看到几个抱怨通过 Google Sheets 中的 IMPORTRANGE 更新数据的延迟,但我需要相反的东西并且不希望第二个工作表自动更新,例如在一天结束时更新。 代码已经是这样的: =IMPORTRANGE("The Key","The_Page!B:D") 回答1 我通过在两个电子表格上使用NOW单元格创建刷新循环来解决这个问题,两个电子表格交叉引用彼此的NOW单元格。 当原始工作表附加了表单提交或其他内容时,它会更新自己的NOW单元格,并重新更新自己的IMPORTRANGE单元格。 第二个电子表格紧随其后,更新其自己的NOW单元格以向原始工作表提供正确的数据。 因为第二个电子表格已经自我更新,它也会更新主IMPORTRANGE ,它首先刷新您希望它显示的数据,以及从原始电子表格中获取NOW单元格的IMPORTRANGE单元格 至少,我很确定它是这样工作的。 坦率地说,我所知道的,也是我所关心的,就是它有效 回答2 也许您需要使用脚本编辑器并编写一个简单的函数: function importData() { var ss = SpreadsheetApp.getActiveSpreadsheet(); //source ss var sheet = ss.getSheetByName("The_Page"); //opens the sheet with your
  • 如何在每天结束时记录Google表格单元格的内容?(How can I record the contents of a Google Sheets cell at the end of each day?)
    问题 在Google表格中,我正在使用IMPORTHTML函数动态收集数据,该数据集中的一个元素当前已复制到单元格C1中。 在另一张纸上,我从A到现在列出了从现在到2017年的日期。 每天结束时,我想在相关日期旁边的B栏中记录最终的C1分数。 我将如何以自动化方式做到这一点? 也就是说,我希望电子表格在每天结束时完成。 回答1 您需要一个脚本,将条目从sheet1!C1复制到sheet2!columnB行(其中columnA = today())。 用工作表名称替换sheet1,sheet2。 设置电子表格 在您的电子表格goto中 文件>电子表格设置 设置您的本地和时区,然后设置重新计算onChange和每小时。 使用内置函数定位今天的行 转到sheet2! 我假设您的columnA具有以日期格式从A1到A#的日期。 我们将需要一个单元格来保存值,我选择的是C1。 在C1中放这个 = MATCH(today(),A:A) 这会给你一个数字,应该是保存今天日期的行。 构建脚本 然后转到 工具>脚本编辑器 为电子表格创建脚本。 这将给您一些示例脚本,将其删除。 代码是 function scorekeeper(){ var sheet1 = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("sheet1"); var
  • Google Scripts Trigger not firing
    I'm struggling to get my script to auto-run at 6AM (ish). I have the trigger set up to run this script, "Time-Driven", on a "day timer" between "6-7 am". I'm getting no failure notifications (set up to email to me immediately), but the script isn't running. It works exactly as I want it to when I manually run it, but the whole point was to automate it, so I'm not sure what I am doing wrong here. I looked up other instances, and they seem to have been fixed by deleting and re-adding the triggers, but that doesn't solve the issue for me. Is it something in my script preventing an auto-run
  • getdata() Script time out only when time-triggered
    I'm importing a range from another spreadsheet and pasting it in the current spreadsheet with this script: function getdata() { var values = SpreadsheetApp.openById('XXXXXX'). getSheetByName('SheetB').getRange('A4:AZ484').getValues(); var destsheet = SpreadsheetApp.getActive().getSheetByName('Sheet1'); var destrange = destsheet.getRange('B520:BA1000'); destrange.setValues(values); } When firing the script manually the execution lasts around 20 seconds and has no problems at all: [19-09-06 23:34:48:847 PDT] Starting execution [19-09-06 23:34:48:999 PDT] SpreadsheetApp.openById([XXXXXX]) [0.145
  • 谷歌电子表格脚本不更新动态信息(Google Spreadsheet Script not Updating Dynamic Info)
    问题 因此,我为 Minecraft 制作了一个电子表格,并将“Feed The Beast”作为游戏的模组包。 我的电子表格列出了为最新版本的 Minecraft 更新的所有模组。 最近我制作了一个脚本来解析页面以获取 mod 版本号。 他们每天每小时更换一次,我宁愿不手动进行。 function GetVersion(url, slice, num1, num2) { var r = UrlFetchApp.fetch(url).getContentText(); var version = r.slice(r.indexOf(slice)).slice(num1, num2); return version; } 在其中一个单元格中,我有以下内容 =GetVersion("http://files.minecraftforge.net", "Build 7.", 12, 15) 现在这工作正常,并为我提供了我正在寻找的版本号。 问题是,当发生更新并且出现新版本时,即使我关闭窗口并重新打开电子表格或重新加载或其他任何东西,解析器也不会反映这一点! 如果我稍微更改上面的内容,例如将 15 更改为 16,它会刷新,但会再次卡在那里,直到我再次手动更改它。 我如何获得它以便在我重新加载工作表时至少刷新它? 编辑:好的,首先我尝试进入资源和触发器,并在每次打开文档时触发一次非常短的时间
  • Google 电子表格、脚本、备份文件、子文件夹(Google Spreadsheet, script, backup file, subfolder)
    问题 我需要每天备份一个文件,我已经使用以下脚本解决了这个问题: function myFunction() { DocsList.getFileById(SpreadsheetApp.getActiveSpreadsheet().getId()).makeCopy(SpreadsheetApp.getActiveSpreadsheet().getName() + "_Backup"); } 我正在使用时间驱动触发器来设置我希望脚本创建备份文件的时间。 但是,我希望这些每日备份转到特定的子文件夹,我们称之为“每日备份文件夹”。 有人可以帮我写一个脚本吗? 提前致谢! 回答1 使用 DocsList 服务:尝试: function backUp() { var backup = DocsList.getFileById(SpreadsheetApp.getActiveSpreadsheet() .getId()) .makeCopy(SpreadsheetApp.getActiveSpreadsheet() .getName() + "_Backup"); backup.addToFolder(DocsList.getFolder('TEST BACKUP')); backup.removeFromFolder(DocsList.getRootFolder()); } 但是,由于
  • Google Spreadsheet, script, backup file, subfolder
    I need to backup a file on a daily basis, I have resolved this issue using the following script: function myFunction() { DocsList.getFileById(SpreadsheetApp.getActiveSpreadsheet().getId()).makeCopy(SpreadsheetApp.getActiveSpreadsheet().getName() + "_Backup"); } And I'm using the Time-driven trigger to set the hour I want the script creates the backup file. However, I would like these daily backups going to a specific Subfolder, lets call it "Daily Backup Folder". Can someone help me with a script for that? Thanks in advance!
  • Linux内核——定时器和时间管理
    一 内核中的时间观念 内核在硬件的帮助下计算和管理时间。硬件为内核提供一个系统定时器用以计算流逝的时间。系 统定时器以某种频率自行触发,产生时钟中断,进入内核时钟中断处理程序中进行处理。 墙上时间和系统运行时间根据时钟间隔来计算。利用时间中断周期执行的工作: 更新系统运行时间; 更新实际时间; 在smp系统上,均衡调度程序中各处理器上运行队列; 检查当前进程是否用尽了时间片,重新进行调度; 运行超时的动态定时器; 更新资源消耗和处理器时间的统计值;二 节拍率 系统定时器的频率;通过静态预处理定义的——HZ;系统启动按照HZ值对硬件进行设置。体系结构不同,HZ值也不同;HZ可变的。    //内核时间频率    #define HZ 1000提高节拍率中断产生更加频繁带来的好处: 提高时间驱动事件的解析度; 提高时间驱动事件的准确度; 内核定时器以更高的频度和准确度; 依赖顶上执行的系统调用poll()和select()能更高的精度运行; 系统时间测量更精细; 提高进程抢占的准确度;提高节拍率带来的副作用: 中断频率增高系统负担增加; 中断处理程序占用处理器时间增多; 频繁打断处理器高速缓存;节拍率HZ值需要在其中进行平衡。 三 jiffies  jiffies:全局变量,用来记录自系统启动以来产生的节拍总数。启动时内核将该变量初始化为0;此后每次时钟中断处理程序增加该变量的值