2014-03-26 28 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()',但是會有性能問題,因爲它會不斷重新計算。