1

我試着寫,看起來像這樣的自定義函數:定製谷歌表功能

function myFunction(arg1, arg2){ 
    //some calculations on the range described by these two arguments 
    return value of the calculation 
} 

arg1是從電子表格單元格格式化爲A1

arg2是第二單元格引用A2

我需要這兩個參數來指向同一電子表格中另一個工作表上的範圍。有點像這樣:range A1:A2 on Sheet2

當我使用代碼"A1:A2"作爲參數getRange()時,我可以得到電子表格Sheet2並獲取範圍。

事情不好走當我這樣做:

var range = arg1 & ":" & arg2; 
var sheetRange = sheet2.getRange(range); 

我敢肯定,這裏有一個語法問題,使得它不可能爲功能解釋range的範圍。

我完全難倒了......任何幫助,指向一個很好的語法參考網站或一些很好的教程也值得讚賞。這是對我的問題的答案;)

回答

0

即使更正您的api和語法錯誤,它仍然會失敗,因爲自定義函數必須是確定性的。由於您傳遞了範圍名稱而不是其值,因此如果您再次傳遞相同範圍但範圍值已更改,則您的函數將返回以前的計算。 Tldr要麼傳遞的值不是範圍名稱或不使用自定義函數。

+0

感謝您的回覆,齊格。我對整個腳本非常陌生。你的答案是否意味着不可能使用兩個字符串參數並以getRange()將它們作爲範圍接受的方式對它們進行格式化? – user3338039

+0

我想要做的基本事情就是創建一個類似於custum SUM函數的東西。我會傳遞一個範圍像SUM(A1:A2),但是我怎麼去做這個工作?希望這有助於澄清我想要做的事情。 – user3338039

+0

它可能建立範圍字符串,並獲得其數據,但就像我說它不會正常工作,因爲自定義函數是確定性的。 –

0

當你選擇一個範圍值,並把它傳遞給他們會在你的代碼作爲一個數組,對數組的詳細信息顯示功能查看此頁面:http://javascript.info/tutorial/array

+0

你可以掀起一個樣本谷歌電子表格來幫助這個傢伙? –

0

我做了一個例子給你。這裏檢查:example

/** 
* custom function 
* 
* @customfunction 
*/ 
function myFunc(input){ 
var ss = SpreadsheetApp.getActiveSpreadsheet(); 
var sheet = ss.getSheetByName('Sheet2'); 

if (input.map) {   // Test whether input is an array. 
    return input.map(myFunc); // Recurse over array if so. 
    } else { 
    return sheet.getRange(1, input).getValue(); 
    } 
} 

它輸入從工作表Sheet值的範圍內,但填充目標細胞與從片材2的條目,使用輸入作爲第一行的列數在Sheet 2中。希望這可以幫助。