2016-02-12 85 views
0

我已经做了一个脚本,执行迭代计算以基于项目成本的总百分比来查找值。更快的迭代计算

这是我到目前为止有:

//<!-- FEE, BOND, & INSURANCE CALCULATOR --!> 
function feeBondInsCalculator(){ 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var sheet = ss.getSheetByName("Pretty Sum Form"); 
    sheet.activate(); 
    // Get all variables from named ranges 
    var bondValue = ss.getRangeByName("bondValue"); 
    var bondCalc = ss.getRangeByName("bondCalc"); 
    var insValue = ss.getRangeByName("insValue"); 
    var insCalc = ss.getRangeByName("insCalc"); 
    var feeValue = ss.getRangeByName("feeValue"); 
    var feeCalc = ss.getRangeByName("feeCalc"); 
    var interCount = ss.getRangeByName("interCount") 

    // Interative calculation to paste calculated values into the body of the spreadsheet 
    for (var i = 0; i<11; i++){ 
     feeCalc.copyTo(ss.getRangeByName("feeValue"), {contentsOnly: true}); 
     bondCalc.copyTo(ss.getRangeByName("bondValue"), {contentsOnly: true}); 
     insCalc.copyTo(ss.getRangeByName("insValue"), {contentsOnly: true}); 
     interCount.setValue(i) 
    } 
    } 

我使用的区域名称,以便用户可以添加/删除行和列,而不必重新设置代码。执行时,代码工作正常,但每次迭代大约需要两秒钟。有没有更有效的方法来完成这项工作?

+0

为什么你需要的'CopyTo从()'的'for'环行?具有动态信息的'for'循环中唯一的行是'interCount.setValue(i)'。是不是'copyTo()'线只是一遍又一遍地做同样的事情?如果是这样,你只需要做一次。 –

+0

这可能是[codereview.se]的问题。参见[Stack Overflow用户代码评论指南](http://meta.codereview.stackexchange.com/q/5777/91556) –

+0

@SandyGood我在copyTo()中需要这些值,因为它们是项目成本总额和基于项目成本的百分比。在前4到5次迭代中,每个时间范围都被复制和粘贴,整个项目成本会发生变化,因此每个范围的值都会发生变化。 –

回答

0

而不是使用复制的,你可以尝试直接引用的范围像一个公式:

=arrayformula(if(bondValue <>"",bondValue,"")) 
+0

我不认为这会奏效。每个范围只是一个单元格,而我并不真正使用数组。我更试图创建一个迭代(循环)计算。 –