2011-01-28 85 views
11

是否可以在Google Spreadsheets中定義可用於任何單元格的功能?是否可以在Google文檔電子表格中定義新功能?

如果我可以像使用本地函數一樣定義和使用引用其他單元格的函數(例如,通過輸入=myfunction(C1, C2, C3)

+0

這些自定義函數很慢。小心。 – fiatjaf 2012-11-17 13:30:36

+0

看起來電子表格中可用的功能並非都可用於腳本。例如,嘗試在腳本中使用JOIN函數會導致錯誤「JOIN未定義」,即使在電子表格中使用JOIN本身也能正常工作。 – Triynko 2015-03-31 17:05:51

回答

8

是的 - 有一個tutorial。只需在電子表格中按名稱使用JavaScript功能即可。使用工具>腳本編輯器定義它們。

小心名稱限制;我被我用類似「function x10(){}」這樣的名字創建的函數的行爲困惑了。重命名爲更長的名稱修復了它。對於什麼是不允許的,可能有文件規定,但我不知道它們在哪裏。

+5

x10不是有效的函數名稱,因爲它也是單元格的本地名稱(行'10',列'X')。除此之外,沒有特別的規定。另一個需要記住的重要事實是自定義函數只能在傳遞參數時運行,即不應該使用任何外部值,因爲函數必須是確定性的(相同的輸入應始終返回相同的值,因爲電子表格將緩存該值)。 – 2013-11-29 11:21:25

-2

我是「新手」。但是,我的經驗是,您只能通過「範圍」對象訪問「單元格」 。您必須將範圍定義爲單個單元格。 例如「A1:A1」,將使您訪問「A1」處的單元格。

RANGE是一個與「SHEET」相關聯的對象。 SHEET是與「SPREADSHEET」關聯的對象。

下面是一些示例代碼來訪問當前激活表單元格A1:

var cell_A1 = SpreadsheetApp.getActiveSheet().getRange("A1:A1"); 

從這裏可以傳遞對象像任何其他參數。

myFunction(cell_A1); 

接收函數必須「知道」它正在處理「範圍」。 它只能通過調用與「範圍」對象關聯的「方法」來訪問其值。

小心! 「範圍」可以由多個單元格組成。您調用的函數 應該測試它是否與單個單元格一起工作。 如果您傳遞多個單元格的範圍,則您的函數可能不會按照您期望的方式運行。

範圍對象的兩個方法:「getNumRows()」和「getNumColumns()」返回範圍對象中的行數和列數。一般來說,如果您使用的方法僅限於更改或訪問單個單元格,並且在更大的範圍集合上運行,則該函數將僅在左上角的單元格成員上執行 。不過要小心。雖然您可能會認爲某種方法只會更改單個單元格,但實際上它可能會影響該範圍內的所有單元格。仔細閱讀文檔。

還有另一種方法來獲取單個單元格的範圍。它的指令 看起來是這樣的:

var cell_B2 = SpreadsheetApp.getActiveSheet().getRange(2, 2, 1, 1). 

前兩個參數告訴「getRange」功能 細胞的位置(行,列格式)。後兩個參數定義與該範圍關聯的「行」和「列」的數量 。通過將它們都設置爲 「1」,您可以訪問單個單元。

希望這會有所幫助。

相關問題