Не может записать значения формы в электронную таблицу

Я создаю форму запроса на отпуск - присоединяю код и передаю значения в виде объекта JSON сценарию на стороне сервера, но затем форма останавливается. Не возвращает никаких значений. есть две проблемы

  1. Как заставить серверный скрипт записывать значения в электронную таблицу
  2. Как получить текущую дату и время для записи.

    <head>
    
    <style>
    
    body
    {
        width:80%;
        margin-left:auto;
        margin-right:auto;
        font-size:16pt;
        font-family:Verdana;
        padding: 5px;
    }
    </style>
    
    </head>
    
    <link rel="stylesheet" href="//ajax.googleapis.com/ajax/libs/jqueryui/1.9.1/themes/cupertino/jquery-ui.css">
    
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
    <script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.9.1/jquery-ui.min.js"></script>
    
    <script>
    
    function sendval(){
    var leaverec = new Object();
    
    leaverec.startdate = $("#txtFromDate").datepicker("getDate");
    leaverec.enddate = $("#txtToDate").datepicker("getDate");
    leaverec.contactnum = $("#contactnum").val();
    
    jsonleaverec = JSON.stringify(leaverec);
    
    google.script.run
              .withSuccessHandler(onsuccess)
              .processLeaveForm(jsonleaverec))
    }
    
    function onsuccess(retval){
       alert("Leave Form Submitted Successfully");
    }
    
    </script>
    
    <div>
    
    <form id="leaveapp">
    
    <?var logged_user = getcurruser(); ?>
    <label><?=logged_user?></label>
    
    <p> Start Date : <input type="text" name="StartDate" id="txtFromDate" /> </p>
    <p> End Date :   <input type="text" name="EndDate" id="txtToDate" /> </p>
    <p> Contact Number : <input type="text" name="Contactnum" id="contactnum" /> </p>
    
    <script>
    $("#txtFromDate").datepicker({
            minDate: 0,
            maxDate: "+60D",
            numberOfMonths: 2,
            onSelect: function(selected) {
                $("#txtToDate").datepicker("option","minDate", selected)
            }
        });
    
    </script>
    
    <script>
    
    $("#txtToDate").datepicker({ 
            minDate: 0,
            maxDate:"+60D",
            numberOfMonths: 2,
            onSelect: function(selected) {
                $("#txtFromDate").datepicker("option","maxDate", selected)
            }
        });
    
    </script>
    
     <input type="button" value="Submit" onclick=senddata() />
    
    </form>
    
    </div>
    
    </html>
    

скрипт Google выглядит следующим образом

function getcurruser(){
 var current_user = PropertiesService.getScriptProperties().getProperty('curruser');
 return current_user;
}

function processLeaveForm(jsonleaverec){
  var doc = SpreadsheetApp.openById("12345678901234567890");
  var sheet = doc.getSheetByName("LeaveRequests")
  var d = new Date();
  var currentTime = d.toLocaleTimeString();
  var curruser = getcurruser();

  var leaveform = eval("(" + jsonleaverec + ")");

  var leavestart = leaveform.StartDate;
  var leaveend = leaveform.EndDate;
  var contactnum = leaveform.contactnum; 

  var leaverange = sheet.getrange((sheet.getLastRow()+1),1);

  leaverange.setValue(curruser);


  return "success";

}

1 ответ

Решение

Более простым способом было бы отправить форму, вам не нужно создавать JSON. Отправьте это HTML с document.getElementById("оставьте приложение");

В HTML вы бы рефакторинг:

google.script.run.withSuccessHandler(onsuccess).processLeaveForm(document.getElementById("leaveapp"));

И в code.gs

function processLeaveForm(jsonleaverec){
  var doc = SpreadsheetApp.openById("12345678901234567890");
  var sheet = doc.getSheetByName("LeaveRequests")
  var d = new Date();
  var currentTime = d.toLocaleTimeString();
  var curruser = getcurruser();

  var leavestart = leaveform.StartDate;
  var leaveend = leaveform.EndDate;
  var contactnum = leaveform.contactnum; 

Вы также должны удалить форму отправки при вводе / кнопке, чтобы не получить пустую страницу:

$('#leaveapp').on("keyup keypress", function(e) {
  var code = e.keyCode || e.which; 
  if (code  == 13) {               
    e.preventDefault();
    return false;
  }
});
Другие вопросы по тегам