2012-10-11 46 views
4

我將在幾個用戶中分配一個包含onOpen菜單的電子表格。我想將菜單定義和功能保留在庫中,因此如果我添加一些菜單選項或更新某些功能,則使用該電子表格的每個人都將自動更新。電子表格從庫中打開菜單

到目前爲止,在電子表格劇本我只有這個簡單的代碼:

function onOpen() { 
    myLib.loadMenu(); 
} 

沒有問題的電子表格上的菜單加載,然而,我不管怎麼命名的菜單上的呼叫,而實際功能(帶或不帶myLib)。當使用該菜單中的選項時,我總是會收到一個錯誤「Script function doSomething could not be found」。

任何關於如何命名函數調用菜單和庫中的實際函數的任何想法,這種方法的工作。

感謝,福斯托

EDIT-1:讓我提供更多的細節和示例代碼

我的目標是能夠更多選項添加到從庫中的電子表格菜單,而無需更新每個用戶的電子表格。

這是示例代碼全部包含在電子表格中的腳本,沒有圖書館尚未使用,它的工作原理沒有問題

function onOpen() { 
    testMenu(); 
} 
function testMenu() { 
    SpreadsheetApp.getActiveSpreadsheet().addMenu(
    'Testing', [ 
     { name: 'Do Something #1', functionName: 'someFunction1' }, 
     null, 
     { name: 'Do Something #2', functionName: 'someFunction2' } ]); 
} 
function someFunction1() { 
    SpreadsheetApp.getActiveSheet().getRange("A1").setValue("Hello from someFunction1"); 
} 
function someFunction2() { 
    SpreadsheetApp.getActiveSheet().getRange("A2").setValue("Bye from someFunction2"); 
} 

我想要做的就是相同的功能,但分裂的電子表格之間的代碼腳本和庫,遵循

在電子表格腳本

function onOpen() { 
    xsLib.testMenu(); 
} 

在圖書館

function testMenu() { 
    SpreadsheetApp.getActiveSpreadsheet().addMenu(
    'Testing', [ 
     { name: 'Do Something #1', functionName: 'someFunction1' }, 
     null, 
     { name: 'Do Something #2', functionName: 'someFunction2' } ]); 
} 
function someFunction1() { 
    SpreadsheetApp.getActiveSheet().getRange("A1").setValue("Hello from someFunction1"); 
} 
function someFunction2() { 
    SpreadsheetApp.getActiveSheet().getRange("A2").setValue("Bye from someFunction2"); 
} 

在此分裂接近使用從測試菜單中的選項時,從庫中調用內置菜單正確但顯示在電子表格上,我得到這樣的消息的錯誤:「腳本功能someFunction1找不到」

回答

2

最後我檢查了你不能給腳本中沒有包含的觸發函數。你最可能需要做的是在你的scpreadsheet的腳本中創建一個包裝函數。事情是這樣的:

function doSomething() { 
    myLib.doSomething(); 
} 

編輯: 您正在尋找的功能目前無法使用。爲了達到預期的效果,您需要指定您要調用的函數屬於庫並且不允許。

有這個功能請求:

http://code.google.com/p/google-apps-script-issues/issues/detail?id=799

如果您有興趣有此功能,請在這個問題上投票,以增加其優先級。

最佳,

安東

+0

感謝安東,這是我迄今已做的,但這種做法並不讓我增加新項目到電子表格菜單來自庫。據說圖書館是「包含」在腳本中,對吧? –

+0

您能否介紹一下您想要添加菜單項的過程?即步驟是什麼? –

+0

工作更好的解釋,我會在今晚晚些時候發佈編輯,再次感謝 –

0

好消息!這適用於新的Google表格。這是2014年4月4日,您仍然需要轉到Google雲端硬盤設置並選中「使用新的Google表格」。 (小心:Beta =錯誤)。這隻適用於新表格,如果您正在製作舊錶格,則無法工作。

~~在資料庫中~~

var menu = SpreadsheetApp.getUi().createMenu('Magical Menu'); 
menu.addItem('Do The Thing', 'LibraryName.function_name'); 
menu.addToUi(); 

~~~