我想知道它实际上是否更快...
-直接在脚本编辑器中进行值计算
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()函数所致..但我不确定。
更改为当前版本,我可以使其速度稍快一些,但有时只是。它并不总是那么快。仍然需要一些时间来加载。
答案 0 :(得分:0)
根据我的计算和对工作表的测试,问题似乎主要来自您在“库存”工作表(功能findcellbyvalue()
)中搜索项目的部分,尤其是当您的工作量很大时的项目。下面,我提出了可以改善您的性能的修改:
findcellbyvalue()
的修改:sheet.getDataRange()
,因为它不需要(您可以执行sheet.getLastRow()
。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 Apps脚本最佳做法:https://developers.google.com/apps-script/guides/support/best-practices(特别重要:Use batch operations
部分)
提升Google表格的性能:https://www.benlcollins.com/spreadsheets/slow-google-sheets/#4
故障排除-执行记录:https://developers.google.com/apps-script/guides/support/troubleshooting#execution_transcript(此工具将帮助您配置脚本中执行每个“操作”所需的时间)。
< / li>