哪个更快?值计算或公式-Google表格脚本编辑器:

时间:2019-10-21 15:24:51

标签: javascript google-apps-script google-sheets spreadsheet google-sheets-api

我想知道它实际上是否更快...

-直接在脚本编辑器中进行值计算

OR

-运行将公式输出到单元格的脚本。

以下是我目前拥有的:

function recheck_qty(itemname){
    var itemcell = findcellbyvalue(itemname);
    var itemcellrange = SpreadsheetApp.getActive().getSheetByName('Inventory').getRange(itemcell);
    var row = itemcell.substring(1);
    var sold = checkqty_sold1(itemname);
    SpreadsheetApp.getActive().getSheetByName('Inventory').getRange("D"+row).setValue("=SUM(F"+row+":"+row+","+sold+")");
}
function checkqty_sold1(item) {
  var ss = SpreadsheetApp.getActive();
  var allsheets = ss.getSheets();
  var sold = "";
  var count = 0;
  for(var s in allsheets){
    var sheet = allsheets[s];
    var sheetname = sheet.getName();
    if(count>0){
      sold += ","
    }
    if(sheetname!='Inventory'){
        sold += 'IF(count(FILTER('+sheetname+'!F2:F,'+sheetname+'!B2:B="'+item+'"))<=0,0,-SUM(FILTER('+sheetname+'!F2:F,'+sheetname+'!B2:B="'+item+'")))';    
        count++;
    }
  } // end of loop
  return sold;
}

以前,我是针对 var sold “ SUM(F” + row +“:” + row“ )的值进行实际计算的。但是我意识到数据实际上需要一些时间才能填充到单元格中。可能是由于我正在调用的所有getrange()和getsheets()函数所致..但我不确定。

更改为当前版本,我可以使其速度稍快一些,但有时只是。它并不总是那么快。仍然需要一些时间来加载。

1 个答案:

答案 0 :(得分:0)

根据我的计算和对工作表的测试,问题似乎主要来自您在“库存”工作表(功能findcellbyvalue())中搜索项目的部分,尤其是当您的工作量很大时的项目。下面,我提出了可以改善您的性能的修改:

findcellbyvalue()的修改:

  • 它不会调用sheet.getDataRange(),因为它不需要(您可以执行sheet.getLastRow()
  • 它使用TextFinder类来有效地找到您想要的物品。
function findcellbyvalue(value) {
  var sheet = SpreadsheetApp.getActive().getSheetByName('Inventory');
  var lastRow = sheet.getLastRow();  
  var searchRange = sheet.getRange(3, 1, lastRow-1, 1);

  // returns a range (of the cell)
  var finder = searchRange.createTextFinder(value).matchEntireCell(true);
  return finder.findNext().getA1Notation();
}

此外,我建议您访问以下链接: