Код Google WebApp не выполнен; вместо этого показывает необработанный код

Я пытался настроить панель инструментов с данными из моей электронной таблицы Google, используя службу HTML. Мой код состоит из 4 разных файлов;

  • Main.gs (состоит из doGet и getSsData)
  • Index.html (getContent из CSS и JS)
  • Таблица стилей.html
  • JavaScript.html

Когда я выполняю свой код и запускаю его в веб-приложении, он не дает мне панель инструментов, а показывает мой необработанный код в качестве вывода. (JS и CSS необработанные)

Я искал разные решения, такие как это и это, но я не мог заставить его работать, несмотря на приведенные там решения.

Это часть моего кода

main.gs

function doGet() {
var HTML = HtmlService.createTemplateFromFile("Index");

return HTML
  .evaluate()
  .setTitle('Dashboard demo')
  .setSandboxMode(HtmlService.SandboxMode.IFRAME);

}

function getSpreadsheetData () {
   var sheetId = ""
   var data = SpreadsheetApp.openById(sheetId).getSheetByName("Leadverwerking").getDataRange().getValues();

 Logger.log(data);

return (data.length > 1) ? data : null;   

}

индекс

<html>
<head>
<link rel="stylesheet" href="https://ssl.gstatic.com/docs/script/css/add-ons.css">
<script src ="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js" ></script>
<script type="text/javascript"  src="https://www.google.com/jsapi" ></script>

<?= HtmlService.createHtmlOutputFromFile("Stylesheet").getContent(); ?>
</head>
<body>


<div>
**content here**
</div>


   <?= HtmlService.createHtmlOutputFromFile("JavaScript").getContent(); ?>

  </body>
</html>

Поэтому я думаю, что это как-то связано с функцией getContent и размещением этой строки кода, но я не могу точно понять, что я делаю неправильно. Любые идеи, почему это не работает? Заранее спасибо!

ИЗМЕНИТЬ

я заменил свой

<?= HtmlService.createHtmlOutputFromFile("Stylesheet").getContent(); ?>
<?= HtmlService.createHtmlOutputFromFile("JavaScript").getContent(); ?>

с участием

<?!= include('Stylesheet'); ?>
<?!= include('JavaScript'); ?>

И добавил функцию в мой main.gs

function include(filename) {
  return HtmlService.createHtmlOutputFromFile(filename)
    .getContent();

}

Теперь веб-приложение вообще ничего не показывает ... но я предполагаю, что код анализируется? По-прежнему нет решения для пустого вывода.

Включен JS

<script>
// Load the Visualization API and desired package
google.load("visualization", "1.0", {"packages":["controls"]});


$(function() {
// Set a callback to run when the Google Visualization API is loaded.
google.setOnLoadCallback(sendQuery);


});

function sendQuery() {

google.script.run
.withSuccesHandler(drawDashboard)
.withFailureHandler(function(msg) {
  // Respond to failure conditions here.
            $('#main-heading').text(msg);
            $('#main-heading').addClass("error");
            $('#error-message').show();
          })
      .getSpreadsheetData();
  }

// Callback function to generate visualization using data in response parameter

function drawDashboard(response) {
    $('#main-heading').addClass("hidden");

    if(response == null) {
    alert("Error: Invalid source data")
    return;
    }

    else {
    var data = google.visualization.arrayToDataTable(response,false);

    var dashboard = new google.visualization.Dashboard(document.getElementsById("dashboard-div"));

    var pieChart = new google.visualization.ChartWrapper ({
      "chartType": "Piechart",
      "containerId": "piechart-div",
      // The pie chart will use the columns 'toelichting 1' and 'Beller'
      // out of all the available ones.
      'view" : { "columns": [1, 8]}
      });

    var table = new google.visualization.ChartWrapper({
        'chartType': 'Table',
        'containerId': 'table-div'
      });

      var tlSlider = new google.visualization.ControlWrapper({
      "controlType" : "NumberRangeFilter",
      "containerId" : "slider-div",
      "options": {
      "filterColumnLabel": "Toelichting"
      }

      });

      var beller = new google.visualization.ControlWrapper({
      "controlType": "CategoryFilter",
      "containerId": "selector-div",
      "options": { 
      "filterColumnLabel": "Beller"
      }
      });

      // afhankelijkheden opzetten tussen charts en controls
      dashboard.bind(tlSlider, [pieChart,table]);
      dashboard.bind(beller, [pieChart,table]);

      // draw alle visualizations in het dashboard
      dashboard.draw(data);
      }

}



</script>

Включенный CSS

<!DOCTYPE html>
<link rel="stylesheet" href="https://ssl.gstatic.com/docs/script/css/add-ons1.css">

<style>
.result-display {
  margin-left: 15 px;
  font-size: 125%;
}

.error {
  color: #FF0000;
}
.hidden {
  display: none;
}
.google-visualization-controls-label {
  margin-left: 20px;  
}

#dashboard-div {
  width: 800px;
}
#control-div {
  margin: 70px;
}
#charts-div {
  margin: 10px;
}
#slider-div {
  float:left;
}
#selector-div {
}
#piechart-div {
  width: 50%;
  height: 250px;
  float:left;
}
#table-div {
  width: 50%;
  float:right;
}
</style>

person MisterDoesntKnowAnything    schedule 03.04.2018    source источник
comment
Используйте теги сценариев force-printing: developers.google.com/apps- script/guides/html/ Обычные теги скриптлета не будут выводиться.   -  person tehhowch    schedule 03.04.2018
comment
@tehhowch Я пробовал это с моей функцией включения; ‹?!= включить('Таблица стилей'); ?› ‹?!= include('JavaScript'); ?› Но страница по-прежнему пуста   -  person MisterDoesntKnowAnything    schedule 03.04.2018
comment
Ваш doGet() работает. HTML без включения пользовательской таблицы стилей и javascript работает (поскольку у меня нет файлов, бесполезно включать их). Попробуйте исключить один, а затем другой, чтобы увидеть, какой из них вызывает ошибку, а затем поделитесь этим файлом. Если это файл javascript, вы также можете продолжить отладку, просмотрев консоль javascript в своем браузере при посещении своей страницы.   -  person Diego    schedule 03.04.2018
comment
@Диего Спасибо за ответ. Я исключил оба, и результат тот же, пустая страница. При запуске кода без включения CSS или JS он не выдает ошибку, а просто пустую страницу. Если я перехожу к консоли javascript, отображается только 4 предупреждения; Неизвестная функция: картинка в картинке и вибрация. Не знаю, что это значит. Может быть, мой css неправильный или мой код js? Спасибо!   -  person MisterDoesntKnowAnything    schedule 03.04.2018
comment
Завернуты ли ваши стили и скрипты в теги style и script соответственно?   -  person Anton Dementiev    schedule 03.04.2018
comment
@AntonDementiev Да, насколько я знаю, он заключен в правильные теги. Мой CSS начинается с ‹style› и заканчивается ‹/style› и JS ‹script› и ‹/script›   -  person MisterDoesntKnowAnything    schedule 03.04.2018
comment
Если вы ничего не видите на странице, то, вероятно, это работает, потому что вы ничего не отображаете, по крайней мере, не в видимой части скрипта. Какой результат вы ожидаете?   -  person Anton Dementiev    schedule 03.04.2018
comment
@MisterDoesntKnowAnything Интересное. Я скопировал ваши doGet(), include() и HTML. Из HTML я удалил обе строки <?=...?>. Затем опубликовал веб-приложение, и я вижу **контент здесь**.   -  person Diego    schedule 03.04.2018
comment
@AntonDementiev Я связал некоторые столбцы своей электронной таблицы с определенными диаграммами (круговая диаграмма и таблица) и ожидал, что они будут видны. Но я не знаю, совместима ли моя таблица с диаграммой. У меня огромное количество данных/столбцов, и я хотел показать 2 столбца из всех данных.   -  person MisterDoesntKnowAnything    schedule 03.04.2018
comment
@ Диего, ну, это странно .. не могли бы вы помочь мне с содержанием? Может быть, это та часть, где он не работает?   -  person MisterDoesntKnowAnything    schedule 03.04.2018
comment
@MisterDoesntKnowAnything Попробуйте повторить мои шаги, описанные выше, скопировав код, который вы разместили в своем вопросе, и посмотрите, работает ли это. Если это так, вам нужно будет поделиться файлом javascript.   -  person Diego    schedule 03.04.2018
comment
@Diego Я сделал то же самое и вижу текст содержимого. Так что я думаю, что это, вероятно, код js. Как мне поделиться этим кодом? Могу ли я отредактировать свой вопрос и включить js?   -  person MisterDoesntKnowAnything    schedule 03.04.2018
comment
@MisterDoesntKnowAnything Да, или опубликуйте суть   -  person Diego    schedule 03.04.2018
comment
@Diego добавил свои js и css для более подробной информации. На данный момент я исключил js и css. Основной код состоит из doGet, Include и getData.   -  person MisterDoesntKnowAnything    schedule 03.04.2018
comment
@MisterDoesntKnowAnything Удалите строки тегов doctype и link над открывающим тегом ‹style› в CSS и повторите попытку.   -  person Diego    schedule 03.04.2018
comment
Вы можете установить обратный вызов onLoad в дополнительных параметрах метода google.load() developers.google.com/loader /#googleload Не знаю, почему вы используете IIFE с синтаксисом селектора jquery. Поскольку он выполняется автоматически, он может работать, когда объект "google" еще недоступен в глобальной области видимости (внешние API-интерфейсы загружаются асинхронно). Есть ли причина для использования нотации $?   -  person Anton Dementiev    schedule 03.04.2018
comment
@AntonDementiev Я следил за учебным пособием по созданию информационных панелей, и оно было включено, поэтому у меня есть IIFE с синтаксисом селектора jquery. Потому что я не был уверен, что он будет работать без этого.   -  person MisterDoesntKnowAnything    schedule 03.04.2018
comment
@Diego, я удалил это, единственное, что я вижу, это загрузка из ‹h1 id = main-heading›Loading...‹/h1›, что, я думаю, правильно .. Но никаких диаграмм или чего-то еще   -  person MisterDoesntKnowAnything    schedule 03.04.2018
comment
@MisterDoesntKnowAnything хорошо, вы можете войти в консоль и посмотреть, существует ли объект google в глобальной области видимости, когда выполняется анонимная функция.   -  person Anton Dementiev    schedule 03.04.2018
comment
@AntonDementiev Нет, я также получил $ от учебника. Я не все понимал, поэтому подумал, что будет достаточно скопировать все и разобраться с моими базовыми знаниями.   -  person MisterDoesntKnowAnything    schedule 03.04.2018
comment
@MisterDoesntKnowAnything. Здорово! Это решает исходный вопрос :) Возможно, вы захотите отредактировать или опубликовать новый вопрос, который более специфичен для вашего JS, поскольку он значительно изменился.   -  person Diego    schedule 03.04.2018
comment
@MisterDoesntKnowAnything Копирование и вставка чужого кода почти никогда не работает. Попытайтесь понять основные концепции, лежащие в основе этого руководства, и создайте свою собственную панель мониторинга с нуля. StackOverflow предназначен для того, чтобы задавать конкретные вопросы по программированию, а не для отладки чужого кода построчно. Кроме того, пожалуйста, прочитайте meta.stackoverflow.com/questions/284236/   -  person Anton Dementiev    schedule 03.04.2018
comment
@AntonDementiev Я пытался сделать это с нуля, но это так и не сработало, и когда я задавал вопросы на этом форуме, мне почти напрямую предлагали попробовать где-то еще или получить отрицательный голос. Я пытался сделать дашборд с информацией, предоставленной google с их примерами, но когда дело дошло до создания дашборда с собственными данными (электронной таблицей), информация была ограничена, и я не мог в ней разобраться. Вот почему я обратился к учебнику. Но мои извинения за попытку это таким образом   -  person MisterDoesntKnowAnything    schedule 03.04.2018
comment
@MisterDoesntKnowAnything Я могу относиться к тому, что вы сказали, и мне жаль слышать, что ваш опыт задавать вопросы не был положительным. Ранее вы писали, что не уверены, почему код написан именно так, как он есть, что наводит меня на мысль, что вам пока не очень удобно пользоваться JavaScript. Итак, решение таково: либо 1) разбить проблему на несколько вопросов и решать их по одному, либо 2) нанять кого-то, кто сделает эту работу за вас.   -  person Anton Dementiev    schedule 03.04.2018
comment
@AntonDementiev Спасибо за совет. Я собираюсь начать все с нуля и решать одну проблему за раз.   -  person MisterDoesntKnowAnything    schedule 05.04.2018