相关疑难解决方法(0)

超过了Google Apps脚本中的最长执行时间

我有一个不断收到此错误的Apps脚本.通过通知邮件判断,看起来时间限制是5分钟.有谁知道是否有办法延长这个时间限制?或者是否有办法再次调用Apps脚本,它从它停止的地方开始提取?任何帮助表示赞赏.

google-apps-script

48
推荐指数
5
解决办法
6万
查看次数

如何增加 Google Apps 脚本中的 6 分钟执行限制?

有什么办法可以增加 Google Apps 脚本的 6 分钟执行时间限制?我认为答案可能是 G Business Suite 的抢先体验计划。如果我能加入抢先体验计划,我可能愿意每月为 G Business Suite 支付 10 美元,以便将执行限制从 6 分钟增加到 30 分钟。但是 G Suite 帮助论坛的一位顾问说抢先体验是一个有限的计划,这意味着我不能保证我能得到它。

有没有其他方法可以增加 6 分钟的执行限制?

请注意,在这个问题中,我不是在询问如何优化我的脚本以适应 6 分钟限制的想法。(我将来可能会问,如果当前问题的答案是“不,没有其他办法。”)

因此,对当前问题的适当答案是:

  • “不,没有其他方法可以增加 Google App Scripts 的 6 分钟执行限制。”
  • “是的,还有其他方法可以提高6分钟执行限制,而这些方法……”

limit execution-time google-apps-script

6
推荐指数
1
解决办法
1万
查看次数

如何解决 Google Apps Script 开发中的常见错误

问答目前是讨论的主题,请参与。目前的计划是在可能的情况下拆分为问答环节。A&A 的答案是社区维基,当状态得到解决时,问题应该成为一个问题。


前言

本问答力求成为Google Apps Script语言开发过程中遇到的常见错误的集合和参考对象,以期提高标签的长期可维护性。

在其他语言和通用标签中也有几个类似的成功经历(参见c++androidphpphp 再次),这一个也紧随其后。


它为什么存在?

新老开发人员提出的关于开发和生产过程中遇到的错误的含义和解决方案的问题数量很多,这些问题可以有效地简化为一个单一的答案。在撰写本文时,即使仅通过语言标签运行查询也会产生:

  • “找不到方法” 8页
  • “无法读取属性” 9 页
  • “在这种情况下无法调用 ...” 5 页
  • “您没有权限” 11页

由于需要考虑细微差别和通常措辞不当的标题,对于志愿者来说,链接到最相关的副本既困难又耗时。


它由什么组成?

此问答包含的条目旨在提供有关如何:

  • 解析错误信息结构
  • 了解错误意味着什么
  • 始终如一地重现(如适用)
  • 解决问题
  • 提供规范问答的链接(在可能的情况下)

目录

为了帮助您浏览不断增长的参考,请使用下面的目录:

  1. 一般错误
  2. 特定于服务的错误

这不是什么?

问答的范围仅限于普通(非平凡)。这不是:

  • 一个包罗万象的指南或“最佳实践”集合
  • 一般 ECMAScript 错误的参考
  • 气体文件
  • 资源列表(我们有一个标签维基

要添加什么?

添加条目时,请考虑以下事项:

  • 错误是否足够常见(参见“为什么”部分的示例)?
  • 该解决方案能否简明扼要地描述并适用于大多数情况?

debugging google-api google-apps-script google-apps-script-addon

6
推荐指数
1
解决办法
4614
查看次数

Apps 脚本极其缓慢或无休止地“准备执行...”

我在我的 Google Sheets 文件上写了一个非常简单的代码。这是目的:

  1. 从StaticSheet中保存一些需要在DynamicSheet中复制的单元格值(所有的Copyxxx)。
  2. 获取用户手动插入的一个特定单元格的值。
  3. 输入一个仅用于增加指标的 While 循环,并获取我想要复制以前保存的那些值的行数。
  4. 复制此行上的这些值但不同的列。

问题是,在我告诉它之后,它似乎在大多数情况下甚至不运行脚本。有趣的是,有时它会起作用,速度非常慢,但它会起作用几分钟。在它再次停止工作之后。

你能告诉我我在这里遗漏了什么吗?

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

4
推荐指数
1
解决办法
4822
查看次数

如何识别哪个时间驱动触发器调用了函数?

我在 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)

google-sheets google-apps-script

4
推荐指数
1
解决办法
909
查看次数

将数据从谷歌表导入 MySQL 表

使用谷歌应用程序脚本将数据从谷歌表导入 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)

javascript mysql jdbc google-apps-script

3
推荐指数
1
解决办法
5534
查看次数

由于getValue和单元格插入而可能导致处理时间长

我刚刚编写了第一个从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

1
推荐指数
2
解决办法
2851
查看次数

setValues 比 setValue 慢吗?

我有一个 Google 文档,其中有多个人参与运行的 Google Apps 脚本脚本。onEdit当人们编辑工作表时会触发一个触发器。据我了解,如果一个人编辑该工作表,就会触发我的onEdit触发功能。

如果第二个人在第一次完成处理之前编辑工作表onEdit,那么它会停止第一个实例,然后onEdit开始第二个实例,而不会完成第一个实例。

为了避免这种情况,我试图使我的代码尽可能高效,理论是如果该onEdit过程花费的时间较少,则重叠的可能性较小。为了实现这一点,我尝试尽量减少读/写。使用一系列记录器语句,我跟踪了耗时的代码行。我注意到我的其中一条setValues()线需要将近 6 秒才能运行。这是一个大数组,在我对其进行调整后被发布回工作表。

我的问题:

  1. 通话时间是否setValues()比通话时间长setValue()
  2. setValues()调用小数组是否比setValues()调用大数组花费的时间更少?

我知道一个命令setValues()会比 1000 个命令快得多setValue()

我原以为无论大小如何,一次写入工作表应该花费大约相同的时间。有什么办法可以尽量减少这个时间吗?

arrays read-write google-sheets google-apps-script

0
推荐指数
1
解决办法
1817
查看次数