超过最大执行时间(第 0 行)
Exceeded maximum execution time (line 0)
我有一个来自工具的 .tsv 文件,我必须 Google Sheet(几乎)实时将其导入报告。这是我的导入代码:
function importBigTSV(url) {return Utilities.parseCsv(UrlFetchApp.fetch(url).getContentText(),'\t');}
它一直工作到几天前,当错误消息一直说 "Exceeded maximum execution time (line 0)."
有人能帮忙吗?非常感谢!
问题:
正如@TheMaster 所说,自定义函数有 30 seconds 的硬限制,您的函数很可能达到了。常规 Apps 脚本执行的时间限制要宽松得多(6 或 30 分钟,具体取决于您的帐户),因此您应该相应地修改您的函数。
功能差异:
为了转换您的功能,您必须考虑这些基本差异:
- 您不能将参数传递给由菜单或按钮调用的函数。因此,您必须找到另一种方法来指定要获取的URL。
- 常规函数返回的值不会自动写入 sheet。您必须使用一种书写方法(如
setValues
或 appendRow
)才能做到这一点。
- 在任何特定单元格中都不会调用非自定义函数,因此您必须指定要将值写入的位置。
因为据我所知,您总是获取相同的 URL,您可以通过将其硬编码到您的函数中来指定 URL。
解决方案:
例如,下面的函数会将解析后的输出写入当前 selected 的范围(在触发函数时)。您也可以使用 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 的列表来获取,并且在触发函数之前,select 想要的 URL,并使用 getActiveRange
以获得此 URL.
正在将功能附加到菜单:
无论如何,一旦您编写了函数,就必须以某种方式附加此函数,以便可以从 sheet 本身触发它。您可以创建 custom menu, or insert and image or drawing, and attach the script to it。引用的链接提供了实现此目的的清晰简洁的步骤。
参考:
我有一个来自工具的 .tsv 文件,我必须 Google Sheet(几乎)实时将其导入报告。这是我的导入代码:
function importBigTSV(url) {return Utilities.parseCsv(UrlFetchApp.fetch(url).getContentText(),'\t');}
它一直工作到几天前,当错误消息一直说 "Exceeded maximum execution time (line 0)."
有人能帮忙吗?非常感谢!
问题:
正如@TheMaster 所说,自定义函数有 30 seconds 的硬限制,您的函数很可能达到了。常规 Apps 脚本执行的时间限制要宽松得多(6 或 30 分钟,具体取决于您的帐户),因此您应该相应地修改您的函数。
功能差异:
为了转换您的功能,您必须考虑这些基本差异:
- 您不能将参数传递给由菜单或按钮调用的函数。因此,您必须找到另一种方法来指定要获取的URL。
- 常规函数返回的值不会自动写入 sheet。您必须使用一种书写方法(如
setValues
或appendRow
)才能做到这一点。 - 在任何特定单元格中都不会调用非自定义函数,因此您必须指定要将值写入的位置。
因为据我所知,您总是获取相同的 URL,您可以通过将其硬编码到您的函数中来指定 URL。
解决方案:
例如,下面的函数会将解析后的输出写入当前 selected 的范围(在触发函数时)。您也可以使用 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 的列表来获取,并且在触发函数之前,select 想要的 URL,并使用 getActiveRange
以获得此 URL.
正在将功能附加到菜单:
无论如何,一旦您编写了函数,就必须以某种方式附加此函数,以便可以从 sheet 本身触发它。您可以创建 custom menu, or insert and image or drawing, and attach the script to it。引用的链接提供了实现此目的的清晰简洁的步骤。