javascript - 如何加快 Google Apps 脚本运行速度?

标签 javascript google-apps-script

我是编程世界的初学者,我创建了一个脚本来浏览table1并带来 table2 中的值根据其中告知的期限。

该脚本可以正常工作,因为它在运行时非常慢。我需要一些帮助来尝试让他更快。

我搜索了数组,但我不明白我可以做什么来应用这个函数。

链接电子表格:https://docs.google.com/spreadsheets/d/1mXPCEC50rw49GU42wM-VoQjVFqeGpw7O7A_eo5tZMms/edit#gid=1483928389

链接脚本:https://script.google.com/d/MRZzi4FhForjALEjRtYg7-CuYWxd3EZHO/edit?mid=ACjPJvFf4IPyfgW5E8N_XRpLXHxjNzQMt2gpkcMd0L7nom15r8yLAaUfGyxmhInUC2B9cVfhDFNmRVqycy7hfyOjIv3IcxkEPxOWx8aSfeGF6zjklcEyKc-daU6m3hDBVTEDq_HpC-gowQI&uiv=2

function teste() {

  var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Página6");
  var tabela = ss.getRange(3, 9, ss.getLastRow(), 1).getValues();

  for(var l1 = 3 ; l1 <= tabela.length ; l1 ++ ){
    var tab1 = ss.getRange(l1,8).getValue();
    for( var l2 = 3 ; l2 <= tabela.length ; l2 ++ ){
      var tab2 = ss.getRange(l2,12).getValue();

      if (tab1 == tab2){

        for( var col = 13 ; col < 17 ; col ++){
             var coluna = ss.getRange(2, col).getValue();

          if( ss.getRange(l1, 9).getValue() == ss.getRange(2, col).getValue()){
               ss.getRange(l2, col).setValue(ss.getRange(l1, 10).getValue());
          }
        }
      }
    }
  } 
}

最佳答案

  • 您想要将表格转换为下图所示。您想要将左表转换为右表。

  • Mês 1Mês 4 的每个 Produto 编号都是相同的。
  • Mês 的数量已排序。
  • 左表和右表的位置在您的示例中是固定的。
    • 左表为 H2:J38
    • 右表为L2:P11
  • 您希望通过修改来加速脚本。

我可以像上面那样理解。如果我的理解是正确的,那么这个修改怎么样?请将此视为多个答案之一。

修改点:

  • 在您的脚本中,重要的一点是准备好要放入工作表的值,然后使用 setValues() 将准备好的值放入工作表。
  • 在此修改中,还准备了 getValues() 检索到的值,并使用 setValues() 将其放入工作表中。

修改后的脚本:

function teste() {
  var ss = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Página6");
  var values = ss.getRange(3, 8, ss.getLastRow() - 2, 5).getValues();

  // Value are parsed and put them to an object.
  var obj = values.reduce(function(o, e) {
    if (o[e[0]]) {
      o[e[0]][e[1]] = e[2];
    } else {
      o[e[0]] = {};
      o[e[0]][e[1]] = e[2];
    }
    return o;
  }, {});

  // Create an array for putting values to sheet.
  var ar = values.filter(function(e) {return e[4]}).map(function(e) {return Object.keys(obj[e[4]]).map(function(f) {return obj[e[4]][f]})});

  // Put the values.
  ss.getRange(3, 13, ar.length, ar[0].length).setValues(ar);
}

引用文献:

如果我误解了您的问题并且这不是您想要的结果,我深表歉意。

关于javascript - 如何加快 Google Apps 脚本运行速度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57096865/

相关文章:

javascript - JQuery 使过多的动画队列

JavaScript 单元测试 : how do you keep track of all the tests you have written and what code coverage you have?

javascript - 如何在 Google Apps 脚本中使用 google.script.run 将 JS 对象传递给服务器函数?

javascript - 如何将 opensocial 0.9 中的文件上传到应用程序服务器?

Javascript用子字符串搜索匹配两个数组

javascript - Google App Script 检查编辑的单元格是否包含空格

javascript - 使用 Google 脚本重置范围

google-apps-script - 很抱歉,从存储读取时发生服务器错误。错误代码 NOT_FOUND

javascript - 在 html 页面中嵌入 javascript 部分的位置

json - 从 Node REST 客户端点击 Google Apps 脚本时出现奇怪的错误