我爲Google Spreadsheets創建了一個腳本,此腳本只是添加了一個新菜單項,如Custom Menu Items in a Spreadsheet所述。然後,我將這個腳本部署爲一個Web App,我希望所有安裝該應用程序的用戶都能夠看到新的菜單項。而且我被困在這一點上。使用Google Web App擴展Google Spreadsheets UI
據我所知,當您將腳本部署爲Web應用程序時,onOpen函數會失去它的含義。因此,在doGet中,我爲onOpen事件創建自定義觸發器,將myOnOpen處理程序附加到它並在myOnOpen中添加一個菜單項,但該項不顯示。
這裏是我的代碼:
function doGet() {
var newSheet = SpreadsheetApp.create("new sheet");
var newId = newSheet.getId();
ScriptProperties.setProperty('newId', newId);
ScriptApp.newTrigger("myOnOpen")
.forSpreadsheet(newId)
.onOpen()
.create();
};
function myOnOpen() {
var newId = ScriptProperties.getProperty('newId');
var sheet = SpreadsheetApp.openById(newId);
var entries = [ { name : "Show bingo", functionName : "Bingo" } ];
sheet.addMenu("My Menu", entries);
};
function Bingo() {
Browser.msgBox("Bingo!");
};
所以,當誰安裝的應用程序在用戶打開「新表」的電子表格,他沒有看到「我的菜單」。我在這裏做錯了什麼?爲什麼菜單項不顯示?在這一天結束時,我想創建一個Web應用程序,該應用程序通過附加菜單和對話框擴展Google Spreadsheets UI。
歡迎任何建議。謝謝!
我無法弄清Bingo函數在新電子表格的腳本中如何結束......我也不能用於'myonopen'函數......你怎麼想象這個過程?我的觀點是,這是不可能的......爲什麼不創建一個模板,腳本已經包含在內,然後創建觸發器?你能澄清一下嗎?我真的好奇...... –
@Sergeinsas當用戶執行應用程序時,會在他的GDrive中創建自定義觸發器。該觸發器附加到用戶的GDrive中的特定電子表格。每次用戶打開此電子表格時,都會調用myOnOpen。它的工作原理,我創建測試帳戶,安裝我的應用程序,打開「新工作表」,myOnOpen被調用。我甚至可以從myOnOpen函數(例如'sheet.setColumnWidth(1,200)')中修改電子表格,但是我不能在那裏創建自定義菜單。模板不適合我,我希望用戶上傳他們的.xls文件,並且我想添加用於編輯這些文件的自定義用戶界面。 – xman85
當用戶打開SS時,您是如何測試myonOpen確實運行的? Bingo怎麼樣?它沒有與電子表格的鏈接...這不符合「腳本和容器」的定義。 –