- Вы хотите открыть новую вкладку для своего браузера, используя созданные данные HTML, когда запускаете функцию в редакторе скриптов.
- Вы используете скрипт, связанный с контейнером.
Если мое понимание верно, как насчет этой модификации?
Точки модификации:
В этой модификации я использовал следующий поток.Пожалуйста, подумайте об этом как об одном из нескольких ответов.
- При запуске
runScript()
открывается диалоговое окно. - Открытое диалоговое окно запускает Javascript для открытия новой вкладки браузераи откройте URL-адрес веб-приложений.
- В это время
generateLinks()
запускается с doGet()
, а значения извлекаются и помещаются в данные HTML.
- Закройте диалоговое окно.
С помощью этого потока при запуске функции в редакторе сценариев созданный HTML-файл открывается как новая вкладка вашего браузера.
Измененный сценарий:
Пожалуйста, скопируйте ивставьте следующий скрипт в связанный с контейнером скрипт электронной таблицы.А затем, пожалуйста, повторно разверните веб-приложения в новой версии.В то же время, в качестве тестового примера, установите Execute the app as:
и Who has access to the app:
как Me
и Anyone, even anonymous
соответственно.В этом случае вам не нужно изменять скрипт на стороне HTML.
function doGet() {
var html = HtmlService.createTemplateFromFile("htmlList");
html.users = generateLinks(); // Modified
return html.evaluate().setTitle("Test my app");
}
function generateLinks() {
var spreadSheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var rr = spreadSheet.getLastRow();
var users = [];
for (var i = 3; i <= rr; i++) {
var firstName = spreadSheet.getRange(i, 1).getValue();
var user = {
firstName: firstName
};
users.push(user);
}
return users; // Modified
}
// I added the following function. Please run this function.
function runScript() {
var url = ScriptApp.getService().getUrl();
var script = "<script>window.open('" + url + "', '_blank').focus();google.script.host.close();</script>";
var html = HtmlService.createHtmlOutput(script);
SpreadsheetApp.getUi().showModalDialog(html, 'sample');
}
- Когда используется
var spreadSheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
, используется 1-й лист электронной таблицы.Поэтому, если вы хотите извлечь значения из определенного листа, например, измените на SpreadsheetApp.getActiveSpreadsheet().getSheetByName("sheetName")
.
Примечание:
- Если вы изменилискрипт веб-приложений, пожалуйста, повторно разверните веб-приложения в новой версии.Таким образом, последний скрипт отражается в веб-приложениях.Пожалуйста, будьте осторожны.
Ссылки: