Reputation: 137
The docs for HtmlService don't state that this shouldn't work, but it seems that the template approach is limited to web app Apps Script projects.
I am attempting to use the HTMLService to create a UI within a SpreadSheet that can take some initial context, and then interact with the sheet. However, a runtime error is thrown when attempting to use "createTemplateFromFile" from within an Apps Script project in the sheet.
"changeDialog" referenced below is a simple file in the Apps Script project with placeholder markup:
<h2> fieldName </h2>
The following code throws an exception "Invalid argument: userinterface" when invoked:
function showSidebar(){
var html = HtmlService.createTemplateFromFile('changeDialog');
html.evaluate();
SpreadsheetApp.getUi()
.showSidebar(html);
}
UPDATE: Updated with the actual code that wasn't working. And...answered by [Mogsdad]. All of the template docs show the web page variant, with the "doGet()" method returning the results of ".evaluate()". I thought that the html object carried the internal state of the "evaluate" method. I turns out that you either set that result to another var, or just do the call in line in the .showSideBar(...) method:
SpreadsheetApp.getUi()
.showSidebar(html.evaluate());
or...
var evaluatedHtml = html.evaluate();
SpreadsheetApp.getUi()
.showSidebar(evaluatedHtml);
Upvotes: 6
Views: 8174
Reputation: 45760
You need to evaluate()
a template to create an HtmlOutput
object.
function showSidebar(){
var html = HtmlService.createTemplateFromFile('changeDialog');
var a = "test";
SpreadsheetApp.getUi()
.showSidebar(html.evaluate());
//////////
}
Since your changeDialog.html
file contains no template tags, you could instead create an HTML file from it directly:
function showSidebar(){
var html = HtmlService.createOutputFromFile('changeDialog');
//////
var a = "test";
SpreadsheetApp.getUi()
.showSidebar(html);
}
Upvotes: 6