#&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:
Выводы после тестирования с вашей электронной таблицей:
- Я мог бы воспроизвести проблему с вашей электронной таблицей
- Я мог бы воспроизвести проблему при создании копии вашей электронной таблицы
- Проблема не возникает при создании совершенно новой электронной таблицы
Таким образом, проблема, должно быть, связана с каким-то параметром в вашей электронной таблице.
Вы можете либо создать новую электронную таблицу с нуля, либо воспользоваться следующим обходным путем:
Перейдите к 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». Обновите таблицу