Диалог Google HtmlService не отображается - PullRequest
0 голосов
/ 20 сентября 2018

Я использую форму HTML для отображения диалогового окна в электронной таблице Google, собираю два фрагмента информации и затем запускаю некоторый скрипт Google.Перед запуском этого сценария я изменяю сообщение в диалоговом окне на «Рабочий ...».Когда сценарий завершится, я хочу, чтобы сообщение изменилось на «Завершено», но оно никогда не появляется.Я предполагаю, что это имеет что-то с обработкой формы.Может ли кто-нибудь помочь мне отладить это?Вот код:

 //Called from custom Menu 
 var html = HtmlService.createHtmlOutputFromFile('index')
  .setWidth(260)
  .setHeight(200)
  .setSandboxMode(HtmlService.SandboxMode.IFRAME);
  SpreadsheetApp.getUi().showModalDialog(html, 'Processing');

//Index.html
     <!DOCTYPE html>
    <html>
      <head>
        <base target="_top">
      </head>
      <body style="font-family: Arial, Helvetica;font-size:13px">

    <div>
      <form><b>Please enter the Begin date and End date to use for this date range.</b><br><br>
         Begin Date:<br>
        <input type="date" id="begindate" name="begindate">
        <br><br>End Date:<br>
        <input type="date" id="enddate" name="enddate">
        <br><br><input type="button" value="OK" id="submitbutton" onmouseup="writeFormData()">
        <input type="button" value="Cancel" onclick="google.script.host.close()" />
      </form>
    </div>

    <script>
      window.writeFormData = function() {
        var beginDate = document.getElementById("begindate").value;
        var endDate = document.getElementById("enddate").value;

        google.script.run
          .withSuccessHandler(dataWasWritten)
          .processForm(beginDate, endDate);
      };

      window.dataWasWritten = function() {
        console.log("Function ran.");
      };
    </script>


function processForm(beginDate, endDate) {
//this works
 var html = HtmlService.createHtmlOutputFromFile('working')
  .setWidth(260)
  .setHeight(200)
  .setSandboxMode(HtmlService.SandboxMode.IFRAME)
  SpreadsheetApp.getUi().showModalDialog(html, 'Tier Processing');

  //Where all the processing is - this works
  TierProcessing.New(beginDate, endDate);

 //This never shows up!
  var html = HtmlService.createHtmlOutputFromFile('done')
  .setWidth(260)
  .setHeight(200)
  .setSandboxMode(HtmlService.SandboxMode.IFRAME)
  SpreadsheetApp.getUi().showModalDialog(html, 'Tier Processing');
}

Спасибо за помощь!

1 Ответ

0 голосов
/ 21 сентября 2018

Непонятно, работают ли и работают ли html-файлы, но кажется, что использование HTML-сервисов является ненужным.Я собрал пример, в котором есть indexBar для index.html, который может выполнить то же самое.

function test() {
  try {
    //Called from custom Menu 
    var html = HtmlService.createHtmlOutputFromFile('HTML_Test')
      .setWidth(260)
      .setHeight(220)
      .setSandboxMode(HtmlService.SandboxMode.IFRAME);
    SpreadsheetApp.getUi().showModalDialog(html, 'Processing');
  }
  catch(err) {
    Logger.log(err);
  }
}

function processForm(beginDate, endDate) {
  try {
    //Where all the processing is - this works
    //TierProcessing.New(beginDate, endDate);
    sleep(5000);
  }
  catch(err) {
    Logger.log(err);
  }
  return;
}

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
  </head>
  <body style="font-family: Arial, Helvetica;font-size:13px">
    <div>
      <form><b>Please enter the Begin date and End date to use for this date range.</b><br><br>
         Begin Date:<br>
        <input type="date" id="begindate" name="begindate">
        <br><br>End Date:<br>
        <input type="date" id="enddate" name="enddate">
        <br><br><input type="button" value="OK" id="submitbutton" onclick="writeFormData()">
        <input type="button" value="Cancel" onclick="google.script.host.close()" />
      </form>
    </div>
    <div>
      <input type="text" id="statusBar" readonly>
    </div>

    <script>
      function writeFormData() {
        document.getElementById("statusBar").value = "Working";
        var beginDate = document.getElementById("begindate").value;
        var endDate = document.getElementById("enddate").value;

        google.script.run
          .withSuccessHandler(dataWasWritten)
          .processForm(beginDate, endDate);
      }

      function dataWasWritten() {
        document.getElementById("statusBar").value = "Function ran";
      }
    </script>
  </body>
</html>
...