2016-06-13 3 views
1

これは可能な場合、自動的に添付されているスプレッドシートのIDを 'openById'で見つけようとしていますか?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でIDを取得できます。ただし、doGetおよびdoPost関数にはアクティブなスプレッドシートの概念はありません。 SpreadsheetApp.getActiveSpreadsheet()メソッドは、呼び出されたときnullを返します。 Web Appsはスプレッドシートにバインドされているとは思われません。リストアするときには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 
} 

あなたはレコードIDを起動するメニュー項目を作成するために、onOpenを使用することにより、プロセスを容易にすることができます。

関連する問題