我有一个不断收到此错误的Apps脚本.通过通知邮件判断,看起来时间限制是5分钟.有谁知道是否有办法延长这个时间限制?或者是否有办法再次调用Apps脚本,它从它停止的地方开始提取?任何帮助表示赞赏.
有什么办法可以增加 Google Apps 脚本的 6 分钟执行时间限制?我认为答案可能是 G Business Suite 的抢先体验计划。如果我能加入抢先体验计划,我可能愿意每月为 G Business Suite 支付 10 美元,以便将执行限制从 6 分钟增加到 30 分钟。但是 G Suite 帮助论坛的一位顾问说抢先体验是一个有限的计划,这意味着我不能保证我能得到它。
有没有其他方法可以增加 6 分钟的执行限制?
请注意,在这个问题中,我不是在询问如何优化我的脚本以适应 6 分钟限制的想法。(我将来可能会问,如果当前问题的答案是“不,没有其他办法。”)
因此,对当前问题的适当答案是:
问答目前是元讨论的主题,请参与。目前的计划是在可能的情况下拆分为问答环节。A&A 的答案是社区维基,当状态得到解决时,问题应该成为一个问题。
前言
本问答力求成为Google Apps Script语言开发过程中遇到的常见错误的集合和参考对象,以期提高google-apps-script标签的长期可维护性。
在其他语言和通用标签中也有几个类似的成功经历(参见c++、android、php、php 再次),这一个也紧随其后。
它为什么存在?
新老开发人员提出的关于开发和生产过程中遇到的错误的含义和解决方案的问题数量很多,这些问题可以有效地简化为一个单一的答案。在撰写本文时,即使仅通过语言标签运行查询也会产生:
由于需要考虑细微差别和通常措辞不当的标题,对于志愿者来说,链接到最相关的副本既困难又耗时。
它由什么组成?
此问答包含的条目旨在提供有关如何:
目录
为了帮助您浏览不断增长的参考,请使用下面的目录:
这不是什么?
问答的范围仅限于普通(非平凡)。这不是:
要添加什么?
添加条目时,请考虑以下事项:
debugging google-api google-apps-script google-apps-script-addon
我在我的 Google Sheets 文件上写了一个非常简单的代码。这是目的:
问题是,在我告诉它之后,它似乎在大多数情况下甚至不运行脚本。有趣的是,有时它会起作用,速度非常慢,但它会起作用几分钟。在它再次停止工作之后。
你能告诉我我在这里遗漏了什么吗?
function Copy_Static_on_Dynamic() {
var app = SpreadsheetApp;
var ss = app.openById("xxxxyy--------yyzzzz")
var StaticSheet = ss.getSheetByName("DEAT Price");
var DynamicSheet = ss.getSheetByName("DEAT Price + TEST");
var CopySKU = StaticSheet.getRange(5,1,40);
var CopyPrices = StaticSheet.getRange(5,3,40,4);
var CopyUsage = StaticSheet.getRange(5,8,40);
var Week_1 = StaticSheet.getRange(2,4).getValues();
var i = 1;
Logger.clear();
while(DynamicSheet.getRange(i,3).getValues() != Week_1)
{
Logger.log(i);
i+=1;
}
CopySKU.copyTo(DynamicSheet.getRange(i,4,40));
CopyPrices.copyTo(DynamicSheet.getRange(i,6,40,4));
CopyUsage.copyTo(DynamicSheet.getRange(i,11,40));
}
Run Code Online (Sandbox Code Playgroud) javascript performance execution google-sheets google-apps-script
我在 Google Sheets 电子表格中有一个 Google App Script 函数,我需要使用时间驱动的触发器每天调用一次。
此函数的运行时间通常比脚本允许的最大时间(当前为 6 分钟)要长,因此我编写了它来通过多次调用来完成其工作。如果该函数尚未完成,我想创建一个临时的时间驱动触发器以在一分钟内再次运行该函数,并在调用该函数时删除临时触发器,但保持每日触发器处于活动状态。伪代码可能会更好地解释它......
function run_job_via_trigger(trigger) {
if(trigger === temporary trigger) {
// If this is a 'temporary' trigger that was created to
// run the job after the first call then delete it.
// This must not delete the daily trigger that makes the
// first call to the function.
// If I check the UID of the trigger here I still
// would need to know which trigger is …Run Code Online (Sandbox Code Playgroud) 使用谷歌应用程序脚本将数据从谷歌表导入 MySQL 表。我有一个非常庞大的数据集可以将谷歌工作表导入表格。但是,我遇到了超出最大执行时间的异常,是否还有其他选项可以加快执行速度。
var address = 'database_IP_address';
var rootPwd = 'root_password';
var user = 'user_name';
var userPwd = 'user_password';
var db = 'database_name';
var root = 'root';
var instanceUrl = 'jdbc:mysql://' + address;
var dbUrl = instanceUrl + '/' + db;
function googleSheetsToMySQL() {
var RecId;
var Code;
var ProductDescription;
var Price;
var dbconnection = Jdbc.getConnection(dbUrl, root, rootPwd);
var statement = dbconnection.createStatement();
var googlesheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('product');
var data = googlesheet.getDataRange().getValues();
for (var i = 1; i < data.length; i++) { …Run Code Online (Sandbox Code Playgroud) 我刚刚编写了第一个从VBA移植的Google Apps脚本,该脚本可格式化一列客户订单信息(感谢您的全力指导)。
描述:
该代码使用-前缀标识状态代码,然后将以下名字和姓氏(如果存在)组合在一起。然后,它会写上“姓氏已完成”的位置。最后,如果订单之间没有间隙,它将插入一个必要的空白单元格(请参见下图)。
问题:
问题是处理时间。它不能处理更长的数据列。我被警告
脚本大量使用方法Range.getValue。
现有优化:
根据对这个问题的回答,我尝试将尽可能多的变量保留在循环之外,并且还改进了if语句。@MuhammadGelbana建议只调用一次Range.getValue方法并移动其值...但是我不知道这将如何/将如何工作。
码:
function format() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = ss.getActiveSheet();
var lastRow = s.getRange("A:A").getLastRow();
var row, range1, cellValue, dash, offset1, offset2, offset3;
//loop through all cells in column A
for (row = 0; row < lastRow; row++) {
range1 = s.getRange(row + 1, 1);
//if cell substring is number, skip it
//because substring cannot process numbers
cellValue = range1.getValue();
if (typeof cellValue === 'number') {continue;}; …Run Code Online (Sandbox Code Playgroud) javascript optimization multidimensional-array google-sheets google-apps-script
我有一个 Google 文档,其中有多个人参与运行的 Google Apps 脚本脚本。onEdit当人们编辑工作表时会触发一个触发器。据我了解,如果一个人编辑该工作表,就会触发我的onEdit触发功能。
如果第二个人在第一次完成处理之前编辑工作表onEdit,那么它会停止第一个实例,然后onEdit开始第二个实例,而不会完成第一个实例。
为了避免这种情况,我试图使我的代码尽可能高效,理论是如果该onEdit过程花费的时间较少,则重叠的可能性较小。为了实现这一点,我尝试尽量减少读/写。使用一系列记录器语句,我跟踪了耗时的代码行。我注意到我的其中一条setValues()线需要将近 6 秒才能运行。这是一个大数组,在我对其进行调整后被发布回工作表。
我的问题:
setValues()比通话时间长setValue()?setValues()调用小数组是否比setValues()调用大数组花费的时间更少?我知道一个命令setValues()会比 1000 个命令快得多setValue()。
我原以为无论大小如何,一次写入工作表应该花费大约相同的时间。有什么办法可以尽量减少这个时间吗?
javascript ×3
arrays ×1
debugging ×1
execution ×1
google-api ×1
jdbc ×1
limit ×1
mysql ×1
optimization ×1
performance ×1
read-write ×1