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);