2016-06-13 55 views
1

我希望'openById'找到它自動附加的電子表格的ID(如果可能的話)?從doGet函數中找到附加電子表格的ID

目前,我正在將電子表格中的單元格拉到HTML模板中,該模板使用單元格數據填充設計。

如果用戶'製作了電子表格的副本',則ID(我手動輸入的)仍然是我使用的原始電子表格的ID,而不是他們正在使用的新電子表格ID。

是否可以動態獲取腳本附加的電子表格的ID?

// code.gs 
function doGet() { 
    var template = HtmlService.createTemplateFromFile('index.html') 
    template.sheet = SpreadsheetApp.openById('THE SPREADSHEET ID'); 

    // returning .evaluate() (an HtmlOutput object) will allow you to display this in a web app. 
    // to get the string HTML content, use .getContent() on the HtmlOutput 
    return template 
     .evaluate(); 
} 

回答

1

的方法openById需要一個ID,它不會返回。可以在電子表格對象上調用getId。但是,doGetdoPost函數沒有活動電子表格的概念;當從它們調用時,方法SpreadsheetApp.getActiveSpreadsheet()返回null。似乎Web應用程序永遠不會被視爲綁定到電子表格,因爲列出觸發器時文檔hints at

所以,沒有直接的方法來實現你想要的。但是有一個解決方法:指導用戶執行一個捕獲Id的函數並將其存儲在ScriptProperties中(他們需要授權這個,所以onOpen不會這麼做)。例如:

function recordId() { 
    var ssId = SpreadsheetApp.getActiveSpreadsheet().getId(); 
    PropertiesService.getScriptProperties().setProperty('id', ssId); 
} 

function doGet(e) { 
    var id = PropertiesService.getScriptProperties().getProperty('id'); 
    var ss = SpreadsheetApp.openById(id); // have access to spreadsheet 
    return ContentService.createTextOutput(id); // confirms that id is known to the script 
} 

可以使這個過程通過使用onOpen創建將推出的recordId菜單項更加容易。

相關問題