2012-08-03 92 views
-1

我在Excel中继承了一个预测模型文件,该文件使用用户定义的VBA函数,我希望将其移至Google Spreadsheets。这是您在电子表格中调用的自定义函数,并且标题和衰减是用户在调用函数时定义的两个范围(将始终用于具有1行和不同列数的范围)。将VBA函数转换为Google Apps脚本函数

VBA代码:

Function views(titles,decay) 
    indx = titles.Count 
    vtotal = 0 

    For ct = 1 To indx 
     vtotal = vtotal + titles(ct) * decay(indx - ct + 1) 
    Next 

    views = vtotal 
End Function 

我在谷歌Apps脚本做这个(微弱)尝试不工作:

function views(titles, decay) { 
    var indx = titles.length; 
    var vtotal = 0; 

    for (var i = 0; i <= indx; i++) { 
     var vtotal = vtotal + titles[i] * decay[indx - i + 1] 
    } 
    return vtotal 
} 

我可以传递的范围为自定义函数,因为我曾尝试在这里做什么?是否有另一种方法可以达到相同的答案?

感谢您的帮助!

+0

关于[meta]被建议投票关闭请求代码翻译的问题。请参阅[代码翻译标记](https://meta.stackoverflow.com/q/265825/1595451) – 2017-06-30 01:13:36

回答

1

将电子表格范围传递给函数时,即使它们是一行高(或一列宽),它们也始终表示为2D JavaScript数组。另外,我认为你可能需要在for循环中对“零基”索引进行相同的小修改。如果范围是一行高,请尝试:

function views(titles, decay) { 
    var indx = titles[0].length; 
    var vtotal = 0; 

    for (var i = 0; i < indx; i++) { 
     var vtotal = vtotal + titles[0][i] * decay[0][indx - i - 1] 
    } 
    return vtotal 
} 
+0

谢谢。我添加了建议的代码(但是将for循环设置为“基于一个”的索引),但是当我在电子表格的单元格中调用该函数时,收到“错误:溢出”消息。 '函数视图(标题,衰减){var_type = titles [0] .length; var vtotal = 0;对于(var i = 1; i <= indx; i ++){ var var total = vtotal + titles [0] [i] * decay [0] [indx-i]; } return vtotal; }' 任何想法为什么或如何确保它返回一个单一的值(整体vtotal)? – khayes 2012-08-03 20:28:08

+0

对不起,我在发布后不久编辑了我的答案,但是您必须抓住我的原始代码 - 现在看到答案 - 应该是'decay [0] [indx-i-1]'。 – AdamL 2012-08-03 20:33:55

+0

是的,我会尝试在我的答案代码 - 从传入范围形成的数组将无论如何都是零。 – AdamL 2012-08-03 20:36:39