当前位置: 首页 > 知识库问答 >
问题:

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

南门刚捷
2023-03-14

我想知道这是否真的更快...

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

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

以下是我目前拥有的:

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 Seld和“SUM(F”row):“row”的值进行了实际计算。但我意识到数据实际上需要一些时间才能填充到单元格中。可能是因为我调用了所有getrange()、getsheets()函数。但我不确定。

换成现在这个,我可以让它稍微快一点,但只是有时候。它并不总是工作得那么快。仍然需要一些时间来加载。

共有1个答案

邵弘义
2023-03-14

根据我的计算和测试,问题似乎主要来自于您在“库存”表中搜索项目的部分(函数findcell byvalue()),尤其是当您有大量项目时。下面我提出一个修改,可能会提高您的性能

  • 它不调用工作表。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();
}

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

>

提高Google Sheets的性能:https://www.benlcollins.com/spreadsheets/slow-google-sheets/#4

疑难解答-执行记录:https://developers.google.com/apps-script/guides/support/troubleshooting#execution_transcript(此工具将帮助您分析在脚本中执行每个“操作”所需的时间)。

 类似资料:
  • 脚本编辑器让你创建和编辑脚本,准备和运行已选择的脚本。拖放或双击右侧的“标识符”窗格的一个标识符来将它添加到编辑器中。 【提示】当你使用查找创建工具或聚合创建工具创建查询时,脚本将会在脚本编辑器中自动生成。 Navicat 提供广泛的高级功能,例如:编辑代码功能、智能自动完成代码、设置脚本格式及更多。 设置脚本格式 若要更改脚本格式,简单地从“格式”菜单选择 - 缩进 为已选择的代码行增加或减少缩

  • 脚本编辑器让你创建和编辑脚本,准备和运行已选择的脚本。拖放或双击右侧的“标识符”窗格的一个标识符来将它添加到编辑器中。 【提示】当你使用查找创建工具或聚合创建工具创建查询时,脚本将会在脚本编辑器中自动生成。 Navicat 提供广泛的高级功能,例如:编辑代码功能、智能自动完成代码、设置脚本格式及更多。 设置脚本格式 若要更改脚本格式,简单地从“格式”菜单选择 - 缩进 为已选择的代码行增加或减少缩

  • 脚本编辑器让你创建和编辑脚本,准备和运行已选择的脚本。拖放或双击右侧的“标识符”窗格的一个标识符来将它添加到编辑器中。 【提示】当你使用查找创建工具或聚合创建工具创建查询时,脚本将会在脚本编辑器中自动生成。 Navicat 提供广泛的高级功能,例如:编辑代码功能、智能自动完成代码、设置脚本格式及更多。 设置脚本格式 若要更改脚本格式,简单地从“格式”菜单选择 - 缩进 为已选择的代码行增加或减少缩

  • 问题内容: 我正在编写一种算法,在其中寻找一对值,这些值加在一起会导致我正在寻找另一个值。 我发现使用a 可以从O(n²)加速我的算法。后来我意识到我并没有真正使用我包含的值,因此就足够了。 我在Google上进行了幂搜索,但是在我的问题的标题中找不到这些方法的渐近运行时间的任何信息。 您能指出我应该在哪里寻找这些信息吗? 问题答案: 后来我意识到我并没有真正使用我包含的值,因此就足够了。 不仅是

  • 我有一个案例,我有一组字段要在Solr中更新。我接收到的输入是映射的形式,键是字段名,值是更新的值。我有一个疑问,在这种情况下,我应该使用curl更新doc还是solrj,在那里我必须将映射转换为solrInputDocument,然后调用add命令。第一种方法会比第二种方法更快吗?

  • 问题内容: 我想在两种情况下编辑Matlab脚本 (1)在Linux终端上运行的matlab命令窗口中,如何创建和编辑脚本文件?采用 将调用交互式编辑器,这在Linux服务器上运行时是不希望的。 (2)在emacs中,有什么方法可以方便地编辑matlab脚本?使用MATLAB-Emacs或EmacsLink哪个更好? 当我尝试从http://sourceforge.net/scm/?type=cv