Откройте файл HTML с данными с помощью Google Script - PullRequest
2 голосов
/ 23 сентября 2019

Я пытаюсь использовать скрипт Google для отображения группы данных в файле HTML, однако мои данные, похоже, не попадают в файл HTML, и я понятия не имею, почему.Может кто-нибудь, пожалуйста, скажите мне, что мне здесь не хватает.

Путь: htmlList.html

<!DOCTYPE html>
<html>
  <head>
    <base target="_top" />
  </head>
  <body>
    My HTML page

    <? for(var i = 0; i <= (users.length -1); i++) { ?>

    <p><?= users[i].firstName ?></p>
    <? } ?>
  </body>
</html>

Путь: Code.js

function doGet(users) {
  var html = HtmlService.createTemplateFromFile("htmlList");
  html.users = users;
  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);
  }

  doGet(users);
}

1 Ответ

4 голосов
/ 23 сентября 2019
  • Вы хотите открыть новую вкладку для своего браузера, используя созданные данные HTML, когда запускаете функцию в редакторе скриптов.
  • Вы используете скрипт, связанный с контейнером.

Если мое понимание верно, как насчет этой модификации?

Точки модификации:

В этой модификации я использовал следующий поток.Пожалуйста, подумайте об этом как об одном из нескольких ответов.

  1. При запуске runScript() открывается диалоговое окно.
  2. Открытое диалоговое окно запускает Javascript для открытия новой вкладки браузераи откройте URL-адрес веб-приложений.
    • В это время generateLinks() запускается с doGet(), а значения извлекаются и помещаются в данные HTML.
  3. Закройте диалоговое окно.

С помощью этого потока при запуске функции в редакторе сценариев созданный 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").

Примечание:

  • Если вы изменилискрипт веб-приложений, пожалуйста, повторно разверните веб-приложения в новой версии.Таким образом, последний скрипт отражается в веб-приложениях.Пожалуйста, будьте осторожны.

Ссылки:

...