首页 > 解决方案 > 执行时编写 Google Apps 脚本

问题描述

我正在使用 google 电子表格和 Apps Script 来收集一些财务数据,有一个功能需要一些时间,因为它需要处理大量信息。

正因为如此,谷歌向我展示了超过最大执行时间,但即使有一个 for 循环在每个循环中写入文件,它也不会在函数完成之前执行它。

有人可以告诉我如何在执行时编写电子表格吗?

谢谢。

在这里留下一个示例脚本。

function myFunction() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var rangeSheet = activeSheet.getRange(1, 1, activeSheet.getLastRow() - 1, 1).getValues();
  // after cleared out i have an array of values so i do:
  rangeSheet.forEach(async (el, idx) => {
    let result = await anotherFunction(el) // <--- this is the function taking around 2 minutes to complete
    sheet.getRange(`$B${idx + 1}`).setValue(`${result}
  })
}

标签: javascriptgoogle-apps-scriptgoogle-sheets

解决方案


这会给你一些性能提升:

function myFunction() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet();
  var rangeSheet = activeSheet.getRange(1, 1, activeSheet.getLastRow() - 1, 1).getValues();
  var data = [];
  rangeSheet.forEach(async (el, idx) => {
    let result = await anotherFunction(el) // <--- this is the function taking around 2 minutes to complete
    data.push([result]);
  })
  sheet.getRange(1,2,data.length,data[0].length).setValues(data);
}

阅读最佳实践了解更多信息。

但是,如果anotherFunction花费太多时间,那么恐怕您需要重新设计逻辑。UrlfetchApp.fetchAll()如果您想获取多个 URL,我建议您使用。

参考:

带有 UrlfetchApp.fetchAll() 或 async/ 等待多个 http 请求的谷歌应用程序脚本?


推荐阅读