2014-03-26 30 views
0

我正在尝试编写一个自定义函数,它将计算并返回单数列上包含信息的单元格的数量。我使用的范围是A(x):Z(x),我似乎无法动态地传递这些信息,所以我可以每次都得到一个用户定义的范围。传递动态范围:Google脚本

编辑:我现在收到的当前错误说:缺少)参数列表后。 (第10行,文件的“已更新”)

到目前为止,我有这个....

function updateNum(row1,col1,row2,col2) 
{ 
var ss = SpreadsheetApp.getActiveSpreadsheet(); 
var s = ss.getSheetByName("report status"); 
var r = s.getActiveRange(row1+col1:row2+col2); <---Line with error 
return (range.length-2)/2 
} 

,我怎么能做出这样传递范围有什么建议?

感谢, 亚历山大

回答

0

变化为线:

var r= s.getRange(row1, col1, row2-row1+1, col2-col1+1); 

但这不会解决你的问题有行仅次于是非感。 “范围”未被声明。我没有看到你想要去的地方。请写一些伪代码。

如果你想要的是算在它得到的信息细胞的数量,只需要使用电子表格的本地函数

counta() 
+0

我想过使用Counta(),但我不太确定如何在列上执行它。你能解释一下我会怎么做吗? –

+0

在单元格中写入= counta(A2:A)来计算从单元格A2(不包括A1)开始的列A中的所有非空白单元格。此公式不应写入列A的单元格中。 – Harold

+0

I'我会试一试,看看我是否可以迭代我试图做的事情。感谢一群人解释它。 –

0

它不可能使用自定义功能,因为他们是确定性的。也就是说,在相同的输入下,它们会返回相同的结果。 就你而言,即使你修复了错误,你仍然没有通过实际的输入,只是它的范围限制。因此,如果范围内的数据发生变化,您仍然通过相同的输入限制,因此将返回以前的缓存结果。 有几种方法可以像传递一个额外的参数一样改变'now()',但是会有性能问题,因为它会不断重新计算。