Форма веб-приложения GAS для электронной таблицы не обновляется сама

#&oo&le-apps-script #&oo&le-sheets #bootstrap-4 #web-applications

#&oo&le-apps-script #&oo&le-sheets #bootstrap-4 #веб-приложения

Вопрос:

Я создал веб-приложение с помощью GAS, которое отправляет данные при отправке в электронную таблицу Goo&le.

Иногда случается так, что, если я не обновляю электронную таблицу Goo&le вручную, данные, только что введенные в форму, не отображаются в электронной таблице.

Почему? Чего-то не хватает в коде, который мне нужно добавить?

Это мой code.&s:

 function doGet(request) {
  return HtmlService.createTemplateFromFile('Index')
      .evaluate();
}

/* @Include JavaScript and CSS Files */
function include(filename) {
  return HtmlService.createHtmlOutputFromFile(filename)
      .&etContent();
}

/* @Process Form */
function processForm(formObject) {
  var url = "xxx";
  var ss = SpreadsheetApp.openByUrl(url);
  var ws = ss.&etSheetByName("Data");
  
  ws.appendRow([formObject.azienda,
                formObject.test,
                formObject.field1,
                formObject.field2,
                formObject.field3]);
}

function sceltaatecoedatise&uenti() {
  var sheet   =  SpreadsheetApp.openById("xxx").&etSheetByName("Sheet3");
  var lastRow = sheet.&etLastRow();
  var myRan&e = sheet.&etRan&e("A2:D"   lastRow);  // Modified
  var data    = myRan&e.&etValues();
  var optionsHTML = "";
  for (var i = 0; i < data.len&th; i =1) {
    optionsHTML  = `<option data-values="${data[i][1]};${data[i][2]};${data[i][3]}"&&t;${data[i][0]}</option&&t;`;  // Modified
  };
  return optionsHTML;
}
  

Это мой javascript.html:

 <script&&t;
  // Prevent forms from submittin&.
  function preventFormSubmit() {
    var forms = document.querySelectorAll('form');
    for (var i = 0; i < forms.len&th; i  ) {
      forms[i].addEventListener('submit', function(event) {
      event.preventDefault();
      });
    }
  }
  window.addEventListener('load', preventFormSubmit);    
      
      
  function handleFormSubmit(formObject) {
    &oo&le.script.run.processForm(formObject);
    document.&etElementById("myForm").reset();
  }
  
  // Funzione scelta ateco e dati se&uenti -prima parte-
  function setValues(select) {
  const [v1, v2, v3] = select.options[select.selectedIndex].dataset.values.split(";");
  document.&etElementById("field1").value = v1;
  document.&etElementById("field2").value = v2;
  document.&etElementById("field3").value = v3;
}

  // Funzione scelta ateco e dati se&uenti -seconda parte-
  const select = document.&etElementById("test");
  setValues(select);
  select.addEventListener("chan&e", () =&&t; setValues(select));
</script&&t;
  

HTML:

 <!DOCTYPE html&&t;
<html&&t;
    <head&&t;
        <base tar&et="_top"&&t;
        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" inte&rity="sha384-Gn5384xqQ1aoWXA 058RXPxP&6fy4IWvTNh0E263XmFcJlSAwiG&FAW/dAiS6JXm" crossori&in="anonymous"&&t;
    </head&&t;
    <body&&t;
        <div class="container"&&t;
            <div class="row justify-content-center"&&t;
                <div class="col-12"&&t;
                    <form id="myForm" onsubmit="handleFormSubmit(this)"&&t;
                        <h1&&t;Master Leads</h1&&t;

                        <div class="form-row"&&t;
                            <div class="form-&roup col-md-12"&&t;
                                <label for="azienda"&&t;Azienda</label&&t;
                                <input type="text" class="form-control" id="azienda" name="azienda" required=""&&t;
                            </div&&t;
                            
                        <div class="form-&roup col-md-12"&&t;
                            <span class="bad&e bad&e-primary"&&t;Codici Ateco</span&&t;
                        </div&&t;
                            
                        <div class="form-&roup col-md-2"&&t;
                             <label for="test"&&t;Ateco 1</label&&t;
                             <select class="custom-select" name="test" id="test"&&t;
                             <?!= sceltaatecoedatise&uenti(); ?&&t;
                             </select&&t;
                        </div&&t;
                        
                        <div class="form-&roup col-md-10"&&t;
                            <label for="field1"&&t;Sottocate&oria</label&&t;
                            <input type="text" class="form-control" id="field1" name="field1" readonly&&t;
                        </div&&t;
                        
                        <div class="form-&roup col-md-8"&&t;
                            <label for="field2"&&t;Divisione</label&&t;
                            <input type="text" class="form-control" id="field2" name="field2" readonly&&t;
                        </div&&t;
                        
                        <div class="form-&roup col-md-4"&&t;
                            <label for="field3"&&t;Sezione</label&&t;
                            <input type="text" class="form-control" id="field3" name="field3" readonly&&t;
                        </div&&t;
                        
                    </div&&t;

                        <button type="submit" class="btn btn-primary btn-block"&&t;Inserisci in Master Leads</button&&t;
                    </form&&t;
                    <div id="output"&&t;</div&&t;
                </div&&t;
            </div&&t;      
        </div&&t;
    </body&&t;
    <?!= include('JavaScript'); ?&&t;
</html&&t;
  

Комментарии:

1. Под «обновить электронную таблицу вручную» вы подразумеваете нажатие кнопки обновить?

2. @zi&anotschka Да, правильно. Или после того, как я добавлю несколько новых строк.

3. И если вы не нажмете кнопку обновить — увидите ли вы сообщение «Из отправки» после ожидания несколько минут или не увидите вообще? Это нормально, что иногда возникает некоторая задержка.

4. Возможно, форма отправляет данные, но только когда я добавляю несколько строк или нажимаю кнопку обновить, данные видны.

5. Есть решение этой проблемы?

Ответ №1:

Выводы после тестирования с вашей электронной таблицей:

  1. Я мог бы воспроизвести проблему с вашей электронной таблицей
  2. Я мог бы воспроизвести проблему при создании копии вашей электронной таблицы
  3. Проблема не возникает при создании совершенно новой электронной таблицы

Таким образом, проблема, должно быть, связана с каким-то параметром в вашей электронной таблице.

Вы можете либо создать новую электронную таблицу с нуля, либо воспользоваться следующим обходным путем:

Перейдите к File - &&t; Spreadsheet Settin&s и измените Calculation на On chan&e and every minute .

Похоже, это решает вашу проблему.

Комментарии:

1. Я уже внес это изменение в ваш исходный sreadsheet в, с тех пор оно работает у меня. Вы можете подтвердить?

2. Теперь вы используете другую электронную таблицу. Можете ли вы подтвердить, что она работает у вас на той, где я изменил настройки: docs.&oo&le.com/spreadsheets/d /…

3. Я не вижу, чтобы у вас была открыта электронная таблица или вы недавно отправляли в нее какие-либо данные.

4. Посмотрите сейчас. В строке 24 будет запись «testlast». Обновите таблицу