超过了最大执行时间(第0行)。

问题描述 投票:0回答:1

The Error Message

我有一个.tsv文件从一个工具,我有导入它的谷歌表(几乎)实时报告。这是我的代码导入。

function importBigTSV(url) {return Utilities.parseCsv(UrlFetchApp.fetch(url).getContentText(),'\t');}

几天前还能正常工作,但错误信息一直在说 "超过了最大执行时间(第0行)"。

有谁能帮忙吗?非常感谢

google-apps-script google-sheets urlfetch custom-function
1个回答
0
投票

问题。

正如 @TheMaster 所说,自定义函数有一个硬性限制,即只能使用一个函数。30秒您的函数很可能已经达到了这个时间。常规应用程序脚本的执行有更宽松的时间限制(6或30分钟,取决于你的账户),所以你应该相应地修改你的函数。

函数之间的差异。

为了改造你的函数,你必须考虑到这些基本的区别。

  • 你不能把参数传给一个由Menu或按钮调用的函数。正因为如此,你必须找到另一种方式来指定要获取的URL。
  • 常规函数返回的值不会自动写入工作表。你必须使用一个写入方法(比如 setValuesappendRow)来实现这一点。
  • 一个非自定义函数不会在任何特定的单元格中被调用,所以你必须指定你想把值写到哪里。

根据我的理解,你总是在获取相同的URL,你可以通过在你的函数中硬编码来指定那个URL。

解决方法

例如下面的函数,将把解析后的输出写到当前选择的范围(在触发函数的那一刻)。你也可以提供一个默认的范围来写入输出,使用 getRange:

function importBigTSV() {
  var url = "{url-to-fetch}";
  var range = SpreadsheetApp.getActiveRange();
  try {
    var output = Utilities.parseCsv(UrlFetchApp.fetch(url).getContentText(),'\t');
    var outputRange = range.offset(0, 0, output.length, output[0].length);
    outputRange.setValues(output);
  } catch(err) {
    console.log(err);
  }
}

如果URL可以改变,我建议你有一个URL列表来获取,并且,在触发功能之前,选择所需的URL,并使用。getActiveRange 为了得到这个URL。

将函数附加到Menu上。

在任何情况下,一旦你写了你的函数,你必须以某种方式附加这个函数,这样它就可以从工作表本身触发。你可以创建一个 自定义菜单或插入图像或图画,以及 附带剧本. 参考链接提供了清晰简洁的实现步骤。

参考文献。

© www.soinside.com 2019 - 2024. All rights reserved.